如何在此MySQL查询中包含IF语句?

时间:2011-07-11 14:32:40

标签: mysql sql if-statement

的MySQL

表1:

+----+--------+---------+------+
| 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 table2中不应包含display = 1

进一步说明:

因此,我想知道table1中与t匹配的行是否为产品。

如果不是产品(即服务),请继续显示

如果 某产品,我想进一步检查其itemid是否包含在table2

如果包含,则不会显示。

如果未包含,则显示

对不起,我不知道怎么解释。 :/

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望排除type ='product'的行:

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

(如果这不是你想要的,恕我直言,有必要进一步解释)

更新:排除table2中匹配行的所有type ='product':

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 )

答案 1 :(得分: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