是否有可能在选择之前以编程方式排除某些字段?

时间:2013-07-05 16:49:15

标签: php mysql select

根据这个SO问题:MYSQL UPDATE: Is it possible to confirm some fields first?

我们可以使用UPDATE中的MySql执行类似的操作:

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语句的实现。此方法将面临在查询中使用子查询。

然而,考虑到这一点,我们如何使用SELECT

做类似的事情

假设以下示例:

<?php
///The Bad String in with which columns should NOT be selected.
$badString ="_none";

在此查询中,我们有大约10个Columns可能包含$badString; 最长的方式,在某些情况下真的不切实际:

$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的{​​{1}}查询,可能是成功获得IF statement查询的最佳方式;   1)SELECT所有行和列, 2)仅显示没有SELECT列的行中的数据,而不必走很远的路?

换句话说,$badString只有没有列的值为SELECT

的行

1 个答案:

答案 0 :(得分:2)

这是我能想到的最简单的:

SELECT *
FROM snakes_tb
WHERE '$badString' NOT IN (col1, col2, col3, col4, col5, ...)
AND snake_is_deadly = 'Yes'

如果没有在查询中明确命名列,则无法测试列。如果您不想对代码中的所有列名进行硬编码,可以使用information_schema获取列列表并从中生成查询。