2

FIND_IN_SET()where myColumnmay contain data as 1,2,3or 2,3,6..in random を使用して、複数の OR 条件を持つソリューションを試す価値はないと思いますFIND_IN_SET( '1', myColumn ) OR FIND_IN_SET( '3', myColumn ) OR FIND_IN_SET( '5', myColumn )

これが適切でない場合、クエリに合わせて正規化されたソリューションが必要になる場合があります

4

1 に答える 1

3

可能であればデータベースを正規化しますが、必死の場合は次のようにすることもできます:-

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)";

?>
于 2014-02-25T09:43:43.253 に答える