1

ここに問題があります。私はそれに取り組む方法がわかりません..次のようなものがあるとしましょう:

SELECT news_key FROM tblNews (WHERE news_key>100);
  while ($row = mysql_fetch_array($rid)) {
  $key=$row['news_key'];

         SELECT articles from tblMain WHERE news_key=$key;
         while ($row2 = mysql_fetch_array($rid2)) {
         echo ($row['articles']);
         }
  }

ここで、人気順に記事を並べ替えたいとしましょう。そのため、2 番目のクエリを次のように変更できます...

         SELECT articles, popularity from tblMain WHERE 
         news_key=$key ORDER BY popularity DESC;

しかし、今はうまくいきません.最初のループがレコードを見つけたときにレコードを取得するだけだからです. また、ここで非常に簡単な図を作成しました。最初のクエリでテーブルを結合するとこれが行われることはわかっていますが、実際の例の最初のクエリには多くのカウントとグループ化があるため、それはオプションではありません。 . また、ページネーションが含まれていることにも言及する必要があるため、ページが選択されるたびに最初のクエリが再クエリされます...

何かアドバイス?

4

3 に答える 3

2

結合を行いたくない場合 (何らかの理由で、テーブルのロックや非常に複雑な SQL の記述が心配な場合)、最初のクエリからキーを配列にロードし、配列を並べ替えてから反復することができます。配列を介して 2 番目のクエリを実行します。

// SELECT news_key FROM tblNews (WHERE news_key>100);
// Execute query.
$keysArray = array();
while ($row = mysql_fetch_array($rid)) {
    $keysArray[] =$row['news_key'];
}
arsort($keysArray);
foreach ($keysArray as $key) {
    // SELECT articles from tblMain WHERE news_key=$key;
    // Execute query.
    while ($row2 = mysql_fetch_array($rid2)) {
    echo ($row['articles']);
}
于 2012-12-06T20:05:03.340 に答える
1

JOINこの場合、両方のテーブルを結合して結果を並べ替えるには、a を使用する必要があります。クエリは次のようになります。

SELECT articles, popularity 
FROM tblNews 
JOIN tblMain 
    ON (tblNews.news_key = tblMain.news_key) 
WHERE news_key > 100 
ORDER BY popularity DESC

このようにして、正しい結果を得ることができるはずです。

于 2012-12-06T20:04:44.183 に答える
0

提案をありがとう!私は実際にあなたのアドバイスを受けて、最初のクエリに戻って結合することになりました...それは複雑でしたが、私はそれを持っていると思います.

大変感謝します!

于 2012-12-06T20:34:36.527 に答える