2010-12-15 19 views
1

私は関連記事セクションを作っています。mysqlから引き出されたアイテムが再び引っ張られないようにする方法

複数のタグを別の投稿と共有する場合、同じ話を何度も引き出していないことを確認したいと思います。

だから、だから私はそれが第二のタグについては、次のループを一周するとき、どのように私は話が引かれていることを確認することができ、今、最初のタグに基づいて2人の関連の話を引っ張って、基本的

foreach($tags as $t) { 

    $getStories = mysql_query("SELECT * FROM `posts` WHERE `tags` LIKE '%$t%' LIMIT 2"); 

    while($related = mysql_fetch_array($getStories)) { 
    echo $related['title']; 
    } 

です前回は2回目または3回目にピックアップされません。私は一意のIDを持っていますが、単に「id」と呼ばれています。この状況では何をするべきか分かりません。

ありがとうございます!

答えて

2

あなたが一度にすべての関連する記事を取得されて行うことができます:

$tagsClause = ''; 
foreach ($tags as $t) { 
    $tagsClause .= " OR tags LIKE '%$t%'"; 
} 
$tagsClause = substr($tagsClause, 4); // Remove first ' OR ' 

$getStories = mysql_query('SELECT * FROM `posts` WHERE ' . $tagsClause); 
while($related = mysql_fetch_array($getStories)) { 
    echo $related['title']; 
} 

しかしを、これはLIMITの使用を考慮していません。

編集
これは明らかに問題を生じませんでした。コメント。

+0

ありがとう!これが期待どおりに機能しているように見えます。私はmysql_queryの最後に "LIMIT 5"を投げただけで、うまく動いているようです。 – Andelas

+0

@scatteredbomb素晴らしい。このアプローチは、 "タグごとに2つの関連記事を見つけても、同じ記事を2回は取っていない"という行に沿って何かをしていた場合には適していませんでした。 – jensgram

+0

元のクエリの制限2の唯一のポイントは、タグの数に応じて合計5つの結果に制限する方法を見つけられなかったためです。この方法で完璧に動作します。 – Andelas

1

ユニークを使用してください。

SELECT UNIQUE(post_id), [other stuff] FROM posts WHERE [...] 
+0

しかし、これは別のクエリです... – jensgram

0

私はIDをチェックし、あなたがタグを処理するときに、あなたが選択したIDを含む配列を作ることができると思いますが、選択したアレイではありませんが、それは効率的ではありません。ちょうどこのよう

$ids = array(); 
foreach($tags as $t) { 
    $getStories = mysql_query("SELECT * FROM `posts` WHERE `tags` = '$t' LIMIT 2"); 

    //here to check and add id to array ids 
    while($related = mysql_fetch_array($getStories)) { 
    echo $related['title']; 
    } 
} 
関連する問題