Запросите SQL, разделенный на 4 поля (из 5), возвращая все поля из таблицы - PullRequest
2 голосов
/ 29 марта 2012

У меня есть таблица с пятью полями, и мне нужно отфильтровать ее, чтобы она была уникальной для первых четырех полей, но в таблице результатов мне нужны все пять. Моя функция ищет все строки в таблице, которые равны данным, записанным в поле поиска, и выглядят так:

$query  = "SELECT * FROM `$userstable` WHERE `name` LIKE  '%inputName%' LIMIT 50;";

Мой стол выглядит так:

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
provider art   name   serie file
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
AAA      327   music  12FH  deal.wav
AAA      134   cowboy 943   cow.exe
AAA      327   music  12FH  blackjack.omg
BBB      327   music  12FH  deal.wav
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

В результате я хочу увидеть что-то вроде этого:

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
provider art   name   serie file
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
AAA      327   music  12FH  deal.wav
AAA      134   cowboy 943   cow.exe
BBB      327   music  12FH  deal.wav
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

UPD: не имеет значения, что будет получена строка AAA AAA 327 music 12FH deal.wav или AAA 327 music 12FH blackjack.omg

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Вы должны использовать group by вместо Отдельный:

select provider, art, name, serie, min(file)
from yourTable
group by provider, art, name, serie

Я не знаю, какую базу данных вы используете.Я написал SQL в SQL-сервере, потому что это то, что знаю, но я думаю, что не составит труда найти эквивалент в вашей БД.

2 голосов
/ 29 марта 2012

Требуется ли вам GROUP BY предложение:

SELECT 
  provider, art,   name,   serie, file
FROM 
  `$userstable` 
WHERE 
  `name` LIKE  '%inputName%' 
GROUP BY 
  provider, art,   name,   serie
LIMIT 50

MySql работает со скрытыми полями , это означает, что ваш столбец file может быть одним иззначения группового файла.Если вы ищете конкретное значение, вам нужна агрегатная функция (max, min, group_concat, ...) или подзапрос.

...