2011-08-01 18 views
1

私は1つのMySQLのテーブルは、行ID名前でと呼ばれているMySQLの検索は

1 - yellow 
2 - black 
3 - red 
4 - green 
5 - white 
6 - blue 

私は、例えば、検索文字列を持っている場合、私はIDの配列を取得できますか

["colors"]=> string(14) "blue,red,white"
+0

ゴールディ、私があなたが実際に使用すべきではない解決策を「受け入れた」と読んでいただければと思います。テーブルが大きくなると、そのクエリはますます遅くなります。 –

答えて

3

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') 
+0

このクエリでは、名前列のインデックスを使用できますか? –

+0

エレガントなソリューション、+1 – delphist

+0

答えはいいえ、インデックスは使用できないので、短くても言葉の工学的意味ではエレガントではありません。 '= 'または' IN'比較がより良いクエリです。 –

1
$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 
} 
-2

この

をお試しください
$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).')'); 

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.implode.php

+0

要素をエスケープする場合は、それ以外のコードではなく、mysql_real_escape_stringで行います。 –

+0

これは必須ではありません – delphist

関連する問題