2009-05-06 6 views
1

最後に6つの「トピック」レコード(topic_statusが0、つまりスパムでない最高のtopic_idsを持つレコード)を取得するJOINクエリがあります。JOINクエリが編集され、一意の値を持つフィールド

SELECT topic_title, topic_slug, meta_value, topic_poster 
FROM `folio_topics` as Topics 
INNER JOIN `folio_topicmeta` as Topicmeta 
ON Topics.topic_id = Topicmeta.topic_id 
WHERE `topic_status` = 0 
AND Topicmeta.meta_key = 'bb_attach_thumb' 
ORDER BY Topics.`topic_id` DESC 
LIMIT 6 

私はfolio_topics.topic_posterフィールドが一意になるように、それは、つまり、私は同じtopic_posterで6つのレコードを得ることはありません。このクエリを編集したいのではなく、6は、すべてのユニークなtopic_poster持っているの記録値。

助けていただけたら幸いです! :-)ヴィンセントの答えのオフリフ


、私は正しく、各topic_posterため最高 topic_idを引っ張るクエリを思い付いたが、それは(ほとんどのクエリに比べて極端に遅くなる、8.7秒を要しました0.1秒未満)。このクエリを最適化する方法はありますか?

SELECT topic_title, topic_slug, meta_value, topic_poster 
FROM `folio_topics` AS Topics 
INNER JOIN `folio_topicmeta` AS Topicmeta 
ON Topics.topic_id = Topicmeta.topic_id 
WHERE Topics.topic_id IN (
    SELECT MAX(`topic_id`) 
    FROM `folio_topics` 
    WHERE `topic_status` = 0 
    GROUP BY `topic_poster`) 
AND Topicmeta.meta_key = 'bb_attach_thumb' 
ORDER BY Topics.`topic_id` DESC 
LIMIT 6 

答えて

0

を試してみて、私はすぐにその巨大なクエリの実行を作るための方法を見つけることができなかったので、私はコード内の2つのクエリに分割しました。ここではPHPのコードは次のとおりです。

$folio_posters = $wpdb->get_results("SELECT MAX(`topic_id`) as topiclist FROM `folio_topics` WHERE `topic_status` =0 GROUP BY `topic_poster` ORDER BY topiclist DESC LIMIT 6"); 

foreach ($folio_posters as $folio_poster) { 
    $folio_poster_list[] = $folio_poster->topiclist; 
} 

$foliopics = $wpdb->get_results("SELECT topic_title, topic_slug, meta_value, topic_poster FROM `folio_topics` AS Topics INNER JOIN `folio_topicmeta` AS Topicmeta ON Topics.topic_id = Topicmeta.topic_id WHERE Topics.topic_id IN (" . implode ($folio_poster_list, ',') . ") AND Topicmeta.meta_key = 'bb_attach_thumb' ORDER BY Topics.`topic_id` DESC"); 

誰かが1つのクエリでそれを行う方法を割り出した場合、私はそのバージョンを受け入れるだろう。 :-)

1

this記事によると、あなたがしようとしているものを達成するためにグループ化を使用することができます。誰もがこの渡って来る場合には、この

SELECT topic_title, topic_slug, meta_value, topic_poster 
FROM `folio_topics` as Topics 
INNER JOIN `folio_topicmeta` as Topicmeta 
ON Topics.topic_id = Topicmeta.topic_id 
WHERE `topic_status` = 0 
AND Topicmeta.meta_key = 'bb_attach_thumb' 
Group By topic_poster 
ORDER BY Topics.`topic_id` DESC 
LIMIT 6 
+0

素晴らしいです。ありがとう、ヴィンセント! – bobbyh

+0

実際、これは各topic_posterの* lowest * topic_idを引っ張っているようで、* highest * topic_idを取得しようとしています。それは、各topic_posterのために利用可能な最高のtopic_idを表示するようにクエリを調整する方法はありますか? – bobbyh

+0

ちょうど何かを試みる - 元のクエリでdescの代わりにascで順序を変更します。したがって、あなたは次のようになります:ORDER BY Topics.'topic_id' ASC - それはあなたが望むことをしますか? –

関連する問題