У меня есть 2 таблицы в моих базах данных, tb_device и tb_label, которые содержат это, например:
tb_device
id (AI) | type | label | etc
-------------------------------------
1 | A123 | 1 | test
2 | A561 | 3 | test2
3 | A777 | 2 | test3
4 | A222 | 3 | test4
tb_label
id (AI) | label
-------------------
1 | Samsung
2 | Apple
3 | Dell
И я уже создал форму CRUD (PHP), которая отображает tb_devices. И этот CRUD имеет форму поиска по каждому столбцу. Другие столбцы работают для поиска, но столбцы с метками не работают, потому что они содержат id из tb_label. Я хочу искать ярлык с названием ярлыка, например samsung, apple, dell, а не с номером. Мой код для поиска:
$sql = "SELECT *
FROM tb_device a, tb_label b
WHERE
type LIKE '%".@$_POST['type']."%' AND
(a.label=b.id AND b.label LIKE '%".@$_POST['label']."%') AND
etc LIKE '%".@$_POST['etc']."%'
ORDER BY type
";
Пытаюсь ввести dell, но результат:
3 | A777 | 2 | test3
Пояснение: dell имеют номер id3, а результат показывает номер id3 из tb_device. Есть какое-нибудь решение, показывающее правильный результат?
Простите за плохой английский






Вы пропустили b.label в своем запросе
$sql = "SELECT a.*, b.label
FROM tb_device a, tb_label b
WHERE
a.type LIKE '%".@$_POST['type']."%' AND
(a.label=b.id AND b.label LIKE '%".@$_POST['label']."%') AND
etc LIKE '%".@$_POST['etc']."%'
ORDER BY a.type
";
Я считаю, что у вас должно быть только WHERE для tb_label.label = (ваша переменная пользовательского ввода: Dell)
Я считаю, что ты хочешь сделать
INNER JOIN tb_label
ON tb_device.label = tb_label.id
Я понял. Спасибо за ответ, сэр. Это работа :)