私は1つのMySQLのテーブルは、行IDと名前で色と呼ばれているMySQLの検索は
1 - yellow 2 - black 3 - red 4 - green 5 - white 6 - blue
私は、例えば、検索文字列を持っている場合、私はIDの配列を取得できますか
["colors"]=> string(14) "blue,red,white"
私は1つのMySQLのテーブルは、行IDと名前で色と呼ばれているMySQLの検索は
1 - yellow 2 - black 3 - red 4 - green 5 - white 6 - blue
私は、例えば、検索文字列を持っている場合、私はIDの配列を取得できますか
["colors"]=> string(14) "blue,red,white"
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
select id from tab where find_in_set(name, '$colors') > 0
NB:以下ダンさんのコメントのとおり、このクエリはインデックスを使用しないと、大きなテーブルの上に遅くなります。 INを使用したクエリがより良い:
select id from tab where name IN ('blue', 'red', 'white')
このクエリでは、名前列のインデックスを使用できますか? –
エレガントなソリューション、+1 – delphist
答えはいいえ、インデックスは使用できないので、短くても言葉の工学的意味ではエレガントではありません。 '= 'または' IN'比較がより良いクエリです。 –
$array = explode(",", $colors);
$search = impode("', '". $array);
$sql = "
SELECT
id,
name
FROM
colors
WHERE
name IN ('$search')
";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
//do something with the matches
}
この
をお試しください$colors = "blue,red,white";
// Exploding string to array
$colors = explode($colors, ',');
$colors_list = array();
foreach($colors as &$color)
{
// Escaping every element
$colors_list[] = "'".mysql_real_escape_string($color)."'";
}
// Executing the query
$query = mysql_query('SELECT `id` FROM `colors` WHERE `name` IN ('.implode(', ', $colors_list).')');
要素をエスケープする場合は、それ以外のコードではなく、mysql_real_escape_stringで行います。 –
これは必須ではありません – delphist
ゴールディ、私があなたが実際に使用すべきではない解決策を「受け入れた」と読んでいただければと思います。テーブルが大きくなると、そのクエリはますます遅くなります。 –