Mysql несколько как не работает - PullRequest
2 голосов
/ 27 октября 2011

У меня есть таблица магазинов. Некоторые поля: имя, веб-сайт, описание и т. Д.

У меня есть автоматическая поисковая строка. Я хочу сопоставить ввод и отобразить несколько связанных магазинов. Прямо сейчас он работает идеально, совпадая с пользовательским вводом и оператором LIKE для имени.

$input = $_GET["q"];
$data = array();
// query your DataBase here looking for a match to $input
include_once "scripts/connect_to_mysql.php";
$query = mysql_query("SELECT name,linklabel,permalink FROM tblMerchants WHERE name LIKE '%$input%'");
while ($row = mysql_fetch_assoc($query)) {
    $json = array();
    $json['name'] = ucwords($row['linklabel']);
    $json['value'] = $row['permalink'];
    $data[] = $json;
}
echo json_encode($data); 

Однако я пытаюсь сопоставить пользовательский ввод с несколькими полями в таблице. Я пытаюсь следующее, и это не работает:

SELECT linklabel,permalink
FROM tblMerchants
WHERE name LIKE '%$input%'
 OR website LIKE '%$input%'
 OR description LIKE '%$input%'

Попытка выяснить это. Любой вклад приветствуется!

Извините, я должен был упомянуть об этом. Не работая, я имею в виду, что при использовании множественного оператора LIKE он по-прежнему возвращает только результаты, похожие на 'name'

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

like s и and s - это общеизвестно, что они плохо играют друг с другом.

Используйте пояснения в скобках, например,

SELECT linklabel,permalink 
FROM tblMerchants WHERE 
(name LIKE '%$input%') OR 
(website LIKE '%$input%')  OR 
(description LIKE '%$input%')

В противном случае можно попытаться угадатьи делать такие вещи, как

SELECT linklabel,permalink 
FROM tblMerchants WHERE 
name LIKE ('%$input%' OR 
website LIKE '%$input%')  OR 
(description LIKE '%$input%')

Я не понимаю, если вышеприведенный запрос является реальным запросом, который он попытается выполнить, но в основном способ, которым он будет объединять / связывать их, может быть «неопределенным» и подчинятьсяинтерпретация.

0 голосов
/ 01 ноября 2013

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

"SELECT linklabel, permalink FROM tblMerchants WHERE
name like '%$input%'
UNION SELECT linklabel, permalink FROM tblMerchants WHERE
description like '%$input%'
UNION SELECT linklabel, permalink FROM tblMerchants WHERE
website like '%$input%'";

Это должно работать.

0 голосов
/ 27 октября 2011

Код в порядке (хорошо, за исключением опасности внедрения SQL-кода и того факта, что он будет медленно расти медленно).Пожалуйста, покажите образцы данных, содержащие строки, которые, по вашему мнению, должны быть возвращены, но которых нет при выполнении этого запроса.

...