查询SQL由4个字段(5个)区分,返回表中的所有字段

时间:2012-03-29 13:24:44

标签: mysql filtering distinct

我有一个包含五个字段的表,我需要将其过滤为唯一的前四个字段,但在结果表中我需要全部五个字段。我的函数是搜索表中与搜索字段中写入的数据相等的所有行,如下所示:

$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 327 music 12FH deal.wavAAA 327 music 12FH blackjack.omg

会导致AAA字符串无关紧要

2 个答案:

答案 0 :(得分:2)

您需要GROUP BY条款:

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

MySql works with hidden fields,这意味着您的file列可能是某些组文件值。如果您要查找特定值,则需要aggregate function ( max, min, group_concat, ... )或子查询。

答案 1 :(得分:2)

您应该使用group by而不是distinct:

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

我不知道您正在使用的数据库。我已经在SQL服务器中编写了SQL,因为这就是所知道的,但我想在数据库中找到等价物并不会有问题。