我有一个包含五个字段的表,我需要将其过滤为唯一的前四个字段,但在结果表中我需要全部五个字段。我的函数是搜索表中与搜索字段中写入的数据相等的所有行,如下所示:
$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.wav
或AAA 327 music 12FH blackjack.omg
答案 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,因为这就是所知道的,但我想在数据库中找到等价物并不会有问题。