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

标签 php mysql select

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

我们可以在 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语句的实现。此方法面对在查询中使用子查询的情况。

但是,考虑到这一点,我们如何使用 SELECT 做类似的事情?

假设以下示例:

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

在此查询中,我们有大约 10 个,其中可能包含 $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...";

这种方式似乎更准确,但如果要检查的列数超过合理数量,则有点不切实际。考虑上面使用 IF 语句UPDATE 查询,成功进行 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 获取列列表并从中生成查询。

关于php - 在选择之前是否可以先以编程方式排除某些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493586/

相关文章:

MYSQL 和随机字符弄乱它

java - 从两个不同的表插入一个表并具有自动增量值

php - 尝试编写一个使用 session 变量的函数

php - 在将数据插入 MySQL 数据库之前在 PHP 上执行条件

php - 使用 PHP 编写包含 100,000 多个条目的 .tgz 文件,但避免写入单个文件

mysql - 如何从数据宏 MS Access 运行追加查询?

mysql - 使用类别表创建 MySQL View

mysql - 是否 hibernate 关闭连接?

MySQL错误: You can't specify target table 'users_words' for update in FROM clause

php - Opencart 1.5.4 在前端显示 https 损坏的图像