Здесь SQL-запрос, который я слегка очистил (только имена столбцов/таблиц/баз данных). Я сохранил структуру так же, как и производство. Это запрос, полученный из моего журнала MySQL.
SELECT master.pk AS pk,
master.vendor_id AS vendorId,
master.vendor_text AS vendorName,
master.device_id AS deviceId,
master.device_did AS deviceDid,
master.device_text AS deviceName,
master.class_id AS classId,
master.class_text AS className,
master.oem_id AS oemId,
master.oem_did AS oemDid,
master.oem_text AS oemName,
master.oem_vendor_text AS oemVendor,
master.comment AS comment,
master.v1 AS v1,
master.v2 AS v2,
master.status AS status,
dev_mod_join.mod_text AS module
FROM master
LEFT JOIN dev_mod_join
ON master.device_did = dev_mod_join.dev_id
WHERE (
master.device_text LIKE CONCAT("%", 'search term', "%")
OR master.vendor_text LIKE CONCAT("%", 'search term', "%")
OR master.oem_text LIKE CONCAT("%", 'search term', "%")
OR master.oem_vendor_text LIKE CONCAT("%", 'search term', "%")
)
GROUP BY master.vendor_text
LIMIT 0, 25
По какой-то причине это возвращает только один результат для каждого поставщика. Это странно. На продавца может быть несколько устройств. Если я ищу поставщика, который, как я знаю, имеет множество устройств, он по-прежнему будет возвращать только одно устройство для этого поставщика (он также возвращает другие устройства с другими поставщиками, но что-то еще соответствует поисковому запросу, но он дает только один поставщик).
Все, что мне не хватает, я думаю, что это имеет какое-то отношение к "OR", но из того, что я знаю, это не должно быть.
Помощь ценится, как всегда.
EDIT: OMG, я, возможно, только что понял. Я использовал GROUP BY вместо ORDER BY.
Ничего себе, смотрел на это некоторое время и вроде 5 минут на SO, и я получаю его
Похоже, что запрос звучит по большей части, единственная часть, которая выглядит подозрительной, - это группа. Попробуйте это с помощью отдельного предложения select вместо группы.
Вот так:
SELECT DISTINCT
master.pk AS pk,
master.vendor_id AS vendorId,
master.vendor_text AS vendorName,
master.device_id AS deviceId,
master.device_did AS deviceDid,
master.device_text AS deviceName,
master.class_id AS classId,
master.class_text AS className,
master.oem_id AS oemId,
master.oem_did AS oemDid,
master.oem_text AS oemName,
master.oem_vendor_text AS oemVendor,
master.comment AS comment,
master.v1 AS v1,
master.v2 AS v2,
master.status AS status,
dev_mod_join.mod_text AS module
FROM master
LEFT JOIN dev_mod_join
ON master.device_did = dev_mod_join.dev_id
WHERE (
master.device_text LIKE CONCAT("%", 'search term', "%")
OR master.vendor_text LIKE CONCAT("%", 'search term', "%")
OR master.oem_text LIKE CONCAT("%", 'search term', "%")
OR master.oem_vendor_text LIKE CONCAT("%", 'search term', "%")
)
GROUP BY
будет недопустимым в других вариантах SQL. Я думаю, вы должны попытаться удалить это и сообщить нам.