如何在MySQL中执行IF THEN语句?

时间:2011-05-07 17:38:49

标签: php mysql select if-statement

MysQL(table1):

+----+--------+-------+--------+
| id | itemid | title | status |
+----+--------+-------+--------+
| 1  |   2    | title |   0    |
+----+--------+-------+--------+
| 2  |   2    | title |   1    |
+----+--------+-------+--------+
| 3  |   3    | title |   1    |
+----+--------+-------+--------+
| 4  |   3    | title |   0    |
+----+--------+-------+--------+
| 5  |   3    | title |   0    |
+----+--------+-------+--------+

MySQL(table2):

+----+---+---+
| id | x | y |
+----+---+---+
| id | 1 | 2 |
+----+---+---+

PHP:

(我知道下面的查询没有任何意义,但它应该只是说明我在这里要做的事情。)

$a = mysql_query("SELECT t1.title FROM table1 AS t1 WHERE t1.title = 'title' ...IF t1.status = 1 THEN (SELECT * FROM table2 AS t2 WHERE t2.x = '1' AND t2.y = t1.itemid) ORDER BY `id`");
while($b = mysql_fetch_assoc($a))
{
    echo $b['title'];
}

所以,我想做的是:

1)从table1获取与title = title匹配的所有行

2)如果status中的table1等于0什么都不做,只需显示数据

3)但是,如果status中的table1等于1,则应检查table2中是否有x = 1的记录, y = itemid (from table1),如果来自table1的数据不是excluded

示例: 在上面的示例中,它应显示ids(table1):应排除1,2,4,5 ... 3,因为状态为1,并且表2中没有匹配的记录。

我希望这是有道理的:/

3 个答案:

答案 0 :(得分:4)

你应该使用join。

Mysql join

或者看看如何在select语句中使用控制流函数:

Control flow functions

答案 1 :(得分:0)

我想断言,如果你有任何if-then-else逻辑,你对存储在数据库中的数据进行任何进一步处理,请使用编程语言。没有什么可以阻止你在PHP,Java,C#等中编写所有这些逻辑。在从数据库中检索数据时,有太多关于if-then-else的问题。

某些数据库管理系统有自己的编程SQL方言,分别是PL / SQL或Oracle / SQL Server的T-SQL ......您可以在数据库中创建自己的逻辑(包,存储过程)模块然后使用那些,但是......你真的需要吗?为什么不能在PHP脚本中实现所有数据表示逻辑?

答案 2 :(得分:0)

我想在一些概念背景下扩展先前的答案:记住SQL是声明性的,而不是程序性的。这意味着您基本上使用SQL来告诉数据库您希望结果表看起来像什么,并且它会找出如何将它提供给您。当你在考虑if / then语句和控制逻辑时,你在考虑程序性而不是声明性术语。这就是为什么之前的回答者建议用“编程语言”(如C#或PHP)来执行if / else逻辑的原因。

这是非常抽象的,所以可能不会直接适用于你这一刻,但我发现当我使用SQL和脚本语言(如PHP)时,将事物划分为'程序'和'声明'是有帮助的。

This StackOverflow问题在程序性与声明性概念上有一些非常好的答案。