0

想象一下你有两张桌子

 table: name            table: keyword
 id   name              nameId   keyword
 1    dude1             1        blue
 2    dude2             1        tall
                        2        blue
                        2        short

我的目标是,如果您搜索 blue and tall,结果将是:

name   matches
dude1  2
dude2  1

我也在使用 PHP,但我想尽可能多地使用 MySQL。有任何想法吗?指出我正确的方向会很好。

4

2 回答 2

3

您需要使用连接两列INNER JOIN如果您只想要在另一个表上至少匹配的记录,那就是它,否则使用LEFT JOIN)并将它们链接到name.id = keyword.nameid. 使用聚合函数COUNT并按名称对它们进行分组。

SELECT a.name, COUNT(b.nameID)
FROM name a INNER JOIN keyword b
        on a.id = b.nameID
WHERE b.keyword = 'tall' or
      b.keyword = 'blue'
GROUP BY a.name

或者

SELECT a.name, COUNT(b.nameID)
FROM name a INNER JOIN keyword b
        on a.id = b.nameID
WHERE b.keyword IN ('tall','blue') 
GROUP BY a.name

SQLFiddle 演示

于 2012-10-18T15:15:48.763 回答
0
select n.name, `matches`
from
    name n
    inner join (
        select id, count(*) as `matches`
        from
            name n
            inner join
            keyword k on n.id = k.nameId
        where keyword in ('blue', 'tall')
        group by id
    ) s on s.id = n.id
order by name
于 2012-10-18T15:24:54.863 回答