2012-02-23 1 views
2

ログインしているユーザーのホスト名がuserid = 8です。 userid = 8が投票した場合、商品テーブルのすべての行を返すようにクエリを設定しますが、好き嫌いのコードは表示しません。JOINがローを検索していません

以下のクエリでは、行は返されません。投票テーブルに各ユーザーIDを挿入する必要はありません(各製品にはユーザーが多すぎます)。これを行う正しい方法は何ですか?

$query= mysql_query("SELECT rate.voted as rvote, child.* FROM products child JOIN vote rate on child.id=rate.parentid WHERE rate.userid='8'") or die(mysql_error()); 

投票テーブル

id | parentid | userid | voted | 
1 | 1  |  6 | 1  | 
2 | 2  |  6 | 1  | 
3 | 1  |  4 | 1  | 
4 | 3  |  6 | 1  | 

製品テーブル

id |  name  | 
1 |  bottled | 
2 |  grain | 
3 |  milk  | 
4 |  bread | 

PHP

while($row=mysql_fetch_assoc($query)) { 
$name = $row['name']; 
$vote = $row['rvote']; 

    echo $name; 

    if($vote!=1) { 
//like or dislike code 
} 



} 

答えて

2

ここJOINを使用して、ユーザー8の結果を返す方法は次のとおりです。

SELECT v.voted, p.* 
FROM product p 
LEFT JOIN vote v 
    ON v.userid = 8 
    AND v.parent_id = p.id 

votedが投票された製品の1、およびNULLそうになります。

製品テーブルのid列のインデックスと、のvoteテーブルの複数列インデックスの間では、かなり高速です。

0
select * from products 
where id not in (select parentid from vote where userid = 8); 
0

このクエリはあなたを与えるだろう望ましい結果は:

select * from product where id not in (select id from vote where userid =8 and (voted = 0 || voted =1)) 
+0

'(...からparentidを選択してください。)また、'(voted = 0 || voted = 1) 'は値だけが可能な場合は不要です。 – Furgas

関連する問題