Mysql поиск с разделителями-запятыми - PullRequest
1 голос
/ 01 августа 2011

У меня есть 1 таблица MySQL, называемая цвета со строками идентификатор и имя

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

Как получить массив идентификаторов, еслиУ меня есть, например, строка поиска

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

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

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

Примечание: согласно комментарию Дэна, приведенному ниже, этот запрос не использует индексы и будет медленным для большой таблицы. Запрос с IN лучше:

select id from tab where name IN ('blue', 'red', 'white')
2 голосов
/ 01 августа 2011
$array = explode(",", $colors);
$search = implode("', '", $array); // implode instead of impode

$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
}
0 голосов
/ 01 августа 2011

Попробуйте это

$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...