ホームページ  >  記事  >  バックエンド開発  >  php master-phpnewnew に問い合わせてください。

php master-phpnewnew に問い合わせてください。

WBOY
WBOYオリジナル
2016-06-13 13:44:58911ブラウズ

phpマスターに聞いてください---phpnewnew
データテーブルが2つあります

テーブル
にはフィールドタイトルがあります

b テーブル
にもフィールドタイトルがあります


テーブル a には 1000 個のデータがあり、テーブル b には 10 個のデータがあります

要件:

テーブル a.title が存在する場合、テーブル a のタイトルをクエリします。 b.title の場合、.title は $array1 に格納されます。sizeof($array1)>5 の場合は格納されません。

a.title が b.title にない場合、a.title は $array2 に格納されます。sizeof($array2)>5 の場合は格納されません。

私のアプローチ

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->$sql="select title from a"
........
while($tpl2result=mysql_fetch_array($result_sql))
          {
              if(sizeof($array1)<5)
              {
               if($this->guolv($tpl2result['title']))
                 array_push($array1,$tpl2result);           
             }
             if(sizeof($array2)<5)
             {
             if(!$this->guolv($tpl2result['title']))
                 array_push($array2,$tpl2result);
             }
             if(sizeof($newtalk)==5&&sizeof($newvote)==5)
             {
                 break;    
                 exit;
             }
          }


質問:

このアプローチはリソースを大幅に浪費し、速度を低下させます。マスター。 。


-----解決策---------------------------- -
ステートメントの結合操作は、
select * from a left join b on a.title = b.title
select * from a right join b on a.title = b.title

は 2 つのテーブル

を比較する SQL ステートメントは必要ありません。データベースでは結合が非常に効率的です。
-----解決策---------
以上です。必要なのは a.title テーブルだけであり、それが NULL の場合は、b テーブルには存在しません。LEFT JOIN は 1 つだけで十分です。
長さは SQL len
または PHP によって決定できます。
------解決策------
タイトル a の左結合 b からタイトルを選択します。 =b.title limit 0,10
これは10個までの制限があるようです
------解決策----------------------
目が覚めたらすぐにご主人様、電話はやめてくださいこれはナンセンスではありません。あなたもよく知っていますし、私もそれを知っています。

コードは実際にはテストされていません。テーブルにはインデックスを付ける必要がありますが、私はそれを使用してテストしていません。 title をインデックスとして使用します。Mysql は php.

PHP コード
 よりも習得が進んでいません。


$array1 = 配列();
$SQL = "SELECT a.title As atitle FROM a WHERE a.title in(SELECT b.title FROM b)";
$mysql->クエリ($SQL);

$合計 = 0;
while ($result = $mysql->fetch_assoc()) {
    $array[] = $result['atitle'];
    if ($total > 5) {
        壊す;
    }
    $total++;

}
$array2 = 配列();
$SQL = "SELECT a.title As atitle FROM a WHERE a.title not in (SELECT b.title FROM b)";
$合計 = 0;
while ($result = $mysql->fetch_assoc()) {
    $array2[] = $result['atitle'];
    if ($total > 5) {
        壊す;
    }
    $total++;
}
<br><font color="#e78608">------解決策---------</font><br><br>
ディスカッション

聞いてないのに何でそんなに話すの?
間違った答えは言うまでもありません

------解決策-----
b 左結合 a だけです。主にb.

ディスカッション

引用:

a.title=b.title の左結合 b からタイトルを選択してください。制限 0,10
これは10個までの限定だそうです


最初の995個がbに入っていなくて、996から1000までがbに入っている場合は無理のようです、

この種の要求には適切な解決策がないようなので、私より効率的な 1 階に従って行うしかありません
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。