使用find_in_set选择包含1行值的列

时间:2013-12-18 14:07:26

标签: php mysql sql find-in-set

我有一个包含许多行和列的表。我想找到包含特定值的列,但在ID = 7时只搜索1行。

编写以下表达式的正确方法是什么?

SELECT *   
FROM mytable
WHERE FIND_IN_SET(400, list_column)
WHEN ID=7;

谢谢。

1 个答案:

答案 0 :(得分:0)

您不能以您建议的形式执行此操作。

在单个查询中显示包含400的列的最佳方法是使用CASE或类似的测试每列一个案例。例如:

SELECT CASE
   WHEN col1=400 THEN 'col1'
   WHEN col2=400 THEN 'col2'
   WHEN col3=400 THEN 'col3'
   ...
   ELSE 'Not found'
END CASE
FROM mytable
WHERE id=7

使用动态SQL(或等效的PHP)可以使用INFORMATION_SCHEMA查询读取表中的所有列,并在第二个查询中使用这些列,例如上面的列。

但是,我猜你想要这样做的原因是因为你的表不在first normal form中,并且你在列中存储重复值。您可能希望查找第一个普通表单以查看是否确实如此,以及是否应重新设计数据库以避免此问题以及其他问题。