【发布时间】:2018-03-08 19:04:31
【问题描述】:
我有两张表,我们先叫它brand_table,结构如下:
<table>
<tr>
<th>brand_id</th>
<th>brand_name</th>
</tr>
<tr>
<td>1</td>
<td>Honda</td>
</tr>
<tr>
<td>2</td>
<td>Ford</td>
</tr>
</table>
另一个是user_table,结构如下:
<table>
<tr>
<th>user_id</th>
<th>username</th>
<th>favorite_brands</th>
</tr>
<tr>
<td>1</td>
<td>John Wick</td>
<td>1,2</td>
</tr>
<tr>
<td>2</td>
<td>Jack Reaper</td>
<td>2</td>
</tr>
<tr>
<td>2</td>
<td>Han Solo</td>
<td>1</td>
</tr>
</table>
大概,我可以通过以下方式知道有多少用户喜欢某个特定品牌:
select count(*)
from table_user
where favorite_brands like
(
SELECT concat('%', brand_id, '%')
from brand_table
where brand_id = <brand_id>
)
现在,如果我想知道喜欢每个品牌的用户总数,那么我必须分两个阶段进行,甚至在编程方面进行:
- 首先,加载所有品牌并将它们存储在结果集中
- 其次,遍历结果集,找出每个brand_id的总用户数
我想做的是在单个查询中执行此操作。
谁能帮帮我?
【问题讨论】:
-
为什么该表有一条
user_id 1记录,favourite_brands为1,2而不是user_id 1的两条记录,每个用户喜欢的品牌都有一条记录? -
提示:使用
FIND_IN_SET()而不是LIKE。 -
既然你有
<brand_id>,就不要使用SELECT!无论如何,当你最终得到"3,12" LIKE '%1%'时会发生什么——错误的结果。 -
感谢@RickJames,非常周到
标签: mysql sql optimization mariadb