【问题标题】:How to do an IF THEN Statement in MySQL?如何在 MySQL 中执行 IF THEN 语句?
【发布时间】:2011-08-20 20:10:19
【问题描述】:

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(表 2):

+----+---+---+
| 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) 如果table1 中的status 等于0 什么都不做,只显示数据

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

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

我希望这是有道理的:/

【问题讨论】:

    标签: php mysql select if-statement


    【解决方案1】:

    您应该为此使用 join。

    Mysql join

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

    Control flow functions

    【讨论】:

    • 这就是答案。如果有任何数据,则使用连接添加数据,否则将不会在结果集中发送。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我想用一些概念背景来扩展前面的答案:请记住,SQL 是声明性的,而不是程序性的。这意味着您基本上使用 SQL 来告诉数据库您希望结果表是什么样子,然后它会弄清楚如何将其提供给您。当您考虑 if/then 语句和控制逻辑时,您是在考虑程序性术语,而不是声明性术语。这就是为什么前面的回答者建议使用 C# 或 PHP 等“编程语言”来执行 if/else 逻辑的原因。

      这是非常抽象的,因此目前可能并不直接适用于您,但我发现当我使用 SQL 和脚本语言(如 PHP)时,将事物划分为“程序性”和“声明性”会很有帮助.

      This StackOverflow 问题在程序与声明性概念方面有一些很好的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 2021-10-20
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        相关资源
        最近更新 更多