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中没有匹配的记录。
我希望这是有道理的:/
答案 0 :(得分:4)
答案 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问题在程序性与声明性概念上有一些非常好的答案。