多个类别中的项目显示多个时间

时间:2011-04-01 14:10:30

标签: sql

我在“装备”表中有物品,它们使用接合表链接到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;

2 个答案:

答案 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 ...),并将多行减少为不同的。