Простой вопрос по PHP-запросу: LIKE - PullRequest
0 голосов
/ 14 мая 2010

Когда я заменяю

$ordering = "apples, bananas, cranberries, grapes";

с

$ordering = "apples, bananas, grapes";

Я больше не хочу, чтобы клюква возвращалась по моему запросу, который я написал так:

$query = "SELECT * from dbname where FruitName LIKE '$ordering'";

Конечно, это не работает, потому что я использовал LIKE неправильно. Я прочитал различные руководства, описывающие, как использовать LIKE, и для меня это не совсем понятно.

Если я изменю конец БД на "НРАВИТСЯ" яблоки "", это работает для ограничения его только яблоками. Нужно ли разбивать порядок по "," или есть способ сделать это в запросе?

Ответы [ 4 ]

8 голосов
/ 14 мая 2010

LIKE обычно используется для частично совпадающих строк, например вы бы использовали

WHERE fruitname LIKE 'app%' 

чтобы найти «яблоко» и «яблоки».

То, что вы (вероятно) хотите, это предложение IN, например,

WHERE fruitname IN ('apples', 'bananas', 'grapes')
2 голосов
/ 14 мая 2010

Вам нужно взорвать строку и преобразовать ее в соответствующий SQL. Вероятно, это синтаксис SQL, который вы хотите получить:

SELECT * FROM dbname WHERE FruitName IN ('apples', 'bananas', 'grapes')

PHP код:

$fruits = array();

foreach (explode(', ', $ordering) as $fruit) {
    $fruits[] = "'" . mysql_real_escape_string($fruit) . "'";
}

$fruits = implode(', ', $fruits);
$sql = "SELECT * FROM dbname WHERE FruitName IN ($fruits)";
2 голосов
/ 14 мая 2010

попробуйте использовать

SELECT * from dbname WHERE FruitName IN ('apples','bananas','grapes')

если вам нужно, чтобы результат был в том же порядке, что и список IN, расширьте запрос с помощью и ORDER BY

SELECT * from dbname WHERE FruitName IN ('apples','bananas','grapes') ORDER BY FruitName
2 голосов
/ 14 мая 2010

Вероятно, должно быть:

SELECT * FROM database WHERE FruitName IN ('apples','bananas','grapes')

...