根据这个SO问题:MYSQL更新:是否可以先确认一些字段?
我们可以用MySql
:中的UPDATE
做这样的事情
UPDATE snakes_tb
SET snake_pic_urls= CONCAT(snake_pic_urls,'*".$newSnakePic."'),
snake_default_pic = IF(snake_default_pic = '' OR snake_default_pic = 'NO_PIC' ,'default_pic',snake_default_pic)
WHERE snake_id={$id}
请注意IF
语句的实现。此方法避免在查询中使用Sub查询。
然而,考虑到这一点,我们怎么能使用SELECT
做类似的事情呢?
假设以下示例:
<?php
///The Bad String in with which columns should NOT be selected.
$badString ="_none";
在这个查询中,我们有大约10个可能包含$badString;
的Columns
在某些情况下,最长且真正不切实际的方法是:
$selectQuery ="SELECT * FROM snakes_tb WHERE snake_is_deadly= 'Yes' AND col1 <> $badString AND col2 <> $badString AND col3 <> $badString AND col4 <> $badString AND col5 <>$badString etc...";
这种方式似乎更准确,但如果要检查的列数超过合理数量,则有点不切实际。考虑到上面的UPDATE
查询和IF statement
,成功进行SELECT
查询的最佳方式是什么;1)SELECT
会全部显示行和列吗,2)显示没有$badString
列的行中的数据,而不必走很长的路吗?
换句话说,SELECT
只包含没有列的值为$badString
的行
这是我能想到的最简单的:
SELECT *
FROM snakes_tb
WHERE '$badString' NOT IN (col1, col2, col3, col4, col5, ...)
AND snake_is_deadly = 'Yes'
如果不在查询中显式命名列,就无法对其进行测试。如果您不想对代码中的所有列名进行硬编码,可以使用information_schema
来获取列列表并由此生成查询。