2011-07-11 4 views
0

MySQLのこのMySQLクエリにIF文を含めるにはどうすればよいですか?

TABLE1:

+----+--------+---------+------+ 
| id | itemid | type | name | 
+----+--------+---------+------+ 
| 1 | 1 | product | t | 
+----+--------+---------+------+ 
| 2 | 2 | product | t | 
+----+--------+---------+------+ 
| 3 | 3 | service | t | 
+----+--------+---------+------+ 

表2:

+--------+---------+ 
| itemid | display | 
+--------+---------+ 
| 1 | 1 | 
+--------+---------+ 

PHP

$a = mysql_query("SELECT * FROM `table1` WHERE `name` LIKE '%t' ...."); 
私は上記ともテストクエリを変更したい

type = productの場合、itemidは、display = 1に含めないでください。

さらに説明:だから

、私はtと一致するtable1内の行は、製品であるかどうかを確認したいです。

の製品(サービス)でない場合は、に表示するとと表示されます。それ製品である場合

、私はそれが含まれている場合は、さらにそのitemidtable2

に含まれているかどうかを確認したい、そしてはそれを表示しません。

それは、その後、が含まれていない場合それを表示。

申し訳ありませんが、私はそれを説明する方法が分かりません。 :/

+0

私は 'と呼ばれる何のフィールドを参照してくださいませんproduct' .... – Neal

+0

申し訳ありませんが、行を追加する必要はありませんでした。しかし、私は今それらを追加しました;) –

+0

また、全体のクエリを追加する必要があります。もちろん、結合や 'table2'に接続される他の部分は省略します。 – Shef

答えて

1

私が正しくあなたを理解していれば、あなたはそのタイプ=「製品」行除外したい:

SELECT * FROM table1 t1, table2 t2 
WHERE t1.itemid = t2.itemid 
AND t1.id = '1' 
AND t1.type <> 'product' 

(それはあなたが望むものではない場合は、私見さらにいくつかの説明が必要です)

をUPDATE:そのタイプ表2に一致する行を持つ=「製品」全てを除外する:

SELECT * FROM table1 t1 
WHERE t1.id = '1' 
AND (t1.type <> 'product' OR NOT EXISTS (
SELECT NULL from table2 t2 
WHERE t1.itemid = t2.itemid) 
+0

私がしたいもの「SELECT * FROM table1 WHERE id = 1 AND IF(type = product、itemid NOT IN(SELECT itemid FROM table2 WHERE display = 1)」のように見えるでしょうか...このようにすることが可能かどうか確信しないでください。 –

+0

可能な解決策についての更新された回答を参照 –

0

私はあなたが探している正確に何について少し困惑しているが、私はあなたがあなたを達成することができると思いますあなたのIFステートメントのそれぞれのケースに対してselectステートメントを作成し、結果を結合することによって、目標を達成できます。これはではないかもしれない、正確何を探している(私が言ったように、私は少し混乱している)が、私はあなたのソリューションが、少なくともこれに近いなります賭ける:

SELECT * 
FROM table1 
WHERE id = 1 
AND type <> 'product' 
UNION 
SELECT t1.* 
FROM table1 t1, table2 t2 
WHERE t1.itemid = t2.itemid 
AND t1.id =1 
AND type = product 
and t2.display <> 1 
関連する問題