2012-02-16 6 views
1

別のテーブルに内部結合を使用して行を選択したいとします。COUNT()= 0を持つことについて混乱しています

SELECT COUNT(t3.ID), t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
INNER JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.act = 'hide' AND t3.dj_id = '$id' 
HAVING COUNT(t3.ID) = 0 
ORDER BY t1.ID DESC 
LIMIT 0,15 

このクエリでは、結果は空です。 0行を選択します。しかし、私はこの条件で行があると確信しています。

クエリは、このクエリで私は間違っt3

で見つかったレコードがないときt1の行を選択する必要がありますか?

おかげ

EDIT

正しいコードが

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID AND t3.act = 'hide' AND t3.dj_id = '$id' 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 
+6

ですINNER JOINがやろうとしていた。 – zerkms

+0

t3が行を返さない場合、どのようにt3.actを選択できますか? –

+3

自分で好きなことをして、カンマの後にスペースバーを使用する方法を学んでください。どの列を使用しているかを簡単に伝えることができます(もちろん、t1.name、t1.label_id、t1の代わりに 't1.name、t1.label_id、t1.date'を使用することを指しています)。カラムを追加または削除するために後で戻ってくる必要があるときには、最初の方がはるかに読みやすくなり、それを読む必要がある人はもっと簡単になります) –

答えて

0

を正しいコードは `クエリは`ものではありませんよりも--- t3`で見つかったレコードがないとき、T1の行を選択する必要がある

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID AND t3.act = 'hide' AND t3.dj_id = '$id' 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 
0

はこの試してみるです:あなたのコードを知らなくても

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
    AND t3.act = 'hide' AND t3.dj_id = '$id' 
      AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 

を、私はこの条件を信頼していない:t3.dj_id = '$id'

+0

does not work。 t3 –

+0

で見つかった行もまだ表示されません。私は空の結果を見る。 –

+0

それはあなたのフィルターの問題です。 't1.ID IN($ lst)AND t1.promo_aktif = 'アクティブ' AND t3.act = '非表示' AND t3.dj_id = '$ id' '。 「間違っている」とは、それ以上のものがフィルタリングされているということです。これらのフィルタをすべて削除し、徐々に追加して見つけてください。 't3.dj_id = '$ id'' –

0

このご希望の結果を与える必要があります。

SELECT t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id IS NULL 
ORDER BY t1.ID DESC 
LIMIT 0,15 
関連する問題