我在“装备”表中有物品,它们使用接合表链接到equipcat表。问题是我想获得用户提供搜索词的所有项目的列表,其中包括equipcat(aka类别描述)字段之一。但是我希望每个项目只列出一次。
似乎我必须对SQL有一些基本的误解,因为我之前遇到过这个问题并且无法搞清楚。我不仅希望解决这一特定问题,而且还要更好地了解它以满足未来的需求。
这是我的SQL。请忽略模糊搜索,因为我发现它们不能很好地扩展/表现。我也知道我使用单个字段来保存关键字违反了良好的设计,我只是要求你忽略它,除非你觉得这对我问的问题很重要。
SELECT equip.equipid, equip.equipdesc, equip.equipgeneraldesc,
equip.keywords, equip.dayprice, equip.weekprice,
equip.monthprice, equip.hideyn, equipcat.equipcat,
equipcat.equipcatkeywords
FROM (equip INNER JOIN equip_equipcat ON equip.equipid = equip_equipcat.equipid)
INNER JOIN equipcat ON equip_equipcat.equipcatid = equipcat.equipcatid
WHERE (equip.equipdesc LIKE '%rake%' OR equip.keywords LIKE '%rake%' OR
equipcat.equipcat LIKE '%rake%' OR equipcat.equipcatkeywords LIKE '%rake%')
AND (equip.hideyn = 0)
ORDER BY equipdesc ASC;
答案 0 :(得分:1)
SELECT equip.*
FROM equip e
WHERE equipid IN
(
SELECT equipid
FROM equip_equipcat ec
JOIN equipcat c
ON c.equipcatid = ee.equipcatid
WHERE equipcat LIKE '%rake%'
OR
equipcatkeywords LIKE '%rake%'
)
AND
(
equipdesc LIKE '%rake%'
OR
keywords LIKE '%rake%'
)
AND hideyn = 0
ORDER BY
equipdesc
答案 1 :(得分:0)
A)您将表格中的字段包括在您的结果中,因此每个类别都需要一行代码=>从查询中删除这些列
B)然后,您可以在查询中添加一个不同的关键字(即SELECT DISTINCT ...),并将多行减少为不同的。