搜索muliple值我不认为这是值得使用FIND_IN_SET()
尝试与多个OR条件的解决方案,其中myColumn
可能包含在随机 FIND_IN_SET('1', myColumn) OR FIND_IN_SET('3', myColumn) OR FIND_IN_SET('5', myColumn)
从逗号分隔列在MySQL
如果数据1,2,3
或2,3,6..
这是不正确的,我可能需要一个标准化的解决方案,以满足我的查询,如果可能的
搜索muliple值我不认为这是值得使用FIND_IN_SET()
尝试与多个OR条件的解决方案,其中myColumn
可能包含在随机 FIND_IN_SET('1', myColumn) OR FIND_IN_SET('3', myColumn) OR FIND_IN_SET('5', myColumn)
从逗号分隔列在MySQL
如果数据1,2,3
或2,3,6..
这是不正确的,我可能需要一个标准化的解决方案,以满足我的查询,如果可能的
归你的数据库,但如果你是绝望的,你可以做这样的事情: -
SELECT DISTINCT Sometable.*
FROM SomeTable
INNER JOIN
(
SELECT 1 AS i UNION SELECT 2 UNION SELECT 3
) Sub1
WHERE FIND_IN_SET(Sub1.i, Sometable.myColumn)
编辑 - 使用按键的排列没有环
<?php
$some_keys = array(1,2,3);
$sql = "SELECT DISTINCT Sometable.*
FROM SomeTable
INNER JOIN
(
SELECT ".implode(" AS i UNION SELECT ", $some_keys)." AS i
) Sub1
WHERE FIND_IN_SET(Sub1.i, Sometable.myColumn)";
?>
或者如果值适用于另一个表的键,那么你可以使用: -
<?php
$some_keys = array(1,2,3);
$sql = "SELECT DISTINCT Sometable.*
FROM SomeTable
INNER JOIN SomeOtherTable
ON SomeOtherTable.id IN (".implode(",", $some_keys).")
AND FIND_IN_SET(SomeOtherTable.id, Sometable.myColumn)";
?>
谢谢。无论如何,我必须循环查询时,1,2,3 ...是动态的。希望没有循环的选项 –
为什么你需要循环?您可以很容易地建立子查询(或一系列FIND_IN_SET语句);例如在php中使用implode。 – Kickstart
我需要循环,因为我在这里搜索键是动态的。 –
是。规范你的数据库结构。 –
@AlmaDo您能否给我一个最佳解决方案 –