MySQL-为每个类别选择单个条目
我道歉。我已经把下面的表格编辑成两张,我只是有点困惑MySQL-为每个类别选择单个条目,mysql,sql,Mysql,Sql,我道歉。我已经把下面的表格编辑成两张,我只是有点困惑 我有一个与下面的表格非常相似的表格,我想显示所有table2类别1,但每个table1类别只有一个随机项目 样本项目表1 +---------+---------------+---------------+ | ID | Item Name | Category | +---------+---------------+---------------+ | 01 | Item A |
我有一个与下面的表格非常相似的表格,我想显示所有table2类别1,但每个table1类别只有一个随机项目 样本项目表1 +---------+---------------+---------------+ | ID | Item Name | Category | +---------+---------------+---------------+ | 01 | Item A | Cat 1 | | 02 | Item B | Cat 1 | | 03 | Item C | Cat 2 | | 04 | Item D | Cat 2 | | 05 | Item E | Cat 3 | | 06 | Item F | Cat 3 | +---------+---------------+---------------+ +---------+---------------+---------------+ |ID |项目名称|类别| +---------+---------------+---------------+ |01 |项目A |第1类| |02 | B项|第1类| |03 | C项|第2类| |04 |项目D |第2类| |05 |项目E |第3类| |06 | F项|第3类| +---------+---------------+---------------+ 样本项目表2 +---------------+---------------+ | Category | Class | +---------------+---------------+ | Cat 1 | 1 | | Cat 2 | 1 | | Cat 3 | 2 | +---------------+---------------+ +---------------+---------------+ |类别|类| +---------------+---------------+ |第1类| 1| |第2类| 1| |第3类| 2| +---------------+---------------+ 我想显示所有table2类别1,但每个table1类别仅显示一个随机项 期望结果 +---------+---------------+---------------+ | 02 | Item B | Cat 1 | | 03 | Item C | Cat 2 | +---------+---------------+---------------+ +---------+---------------+---------------+ |02 | B项|第1类| |03 | C项|第2类| +---------+---------------+---------------+ (这在我的PHP脚本中)
提前谢谢您可以这样做
SELECT t.id, itemname, category
FROM
(
SELECT
(
SELECT id
FROM table1
WHERE category = t.category
ORDER BY RAND()
LIMIT 1
) id
FROM table1 t
GROUP BY category
) q JOIN table1 t
ON q.id = t.id
注意:使用RAND()
非常昂贵
输出:
| ID | ITEMNAME | CATEGORY |
|----|----------|----------|
| 1 | Item A | Cat 1 |
| 3 | Item C | Cat 2 |
| 6 | Item F | Cat 3 |
|ID |项目名称|类别|
|----|----------|----------|
|1 |项目A |类别1|
|3 | C项|第2类|
|6 |项目F |第3类|
下面是演示试试这样的方法:
SELECT id, itemname, category FROM (
SELECT id, itemname, category FROM sample_table
ORDER BY RAND()
) AS tmp
GROUP BY category
请注意,此查询在MySQL中完全有效
最安全的方法是使用相关子查询。要获取
项目id
:
select category,
(select item_id from sample s where s2.category = s.category order by rand() limit 1) as item_id
from sample s
group by category;
要获取其余的项目信息,请将其重新加入:
select s.*
from (select category,
(select item_id from sample s where s2.category = s.category order by rand() limit 1) as item_id
from sample s
group by category
) c join
sample s
on s.item_id = c.item_id;
在上面编辑的场景之前,我使用了下面的查询,除了不会随机化每个类别的条目外,它工作得很好:
SELECT * FROM Table1,Table2
WHERE Table2.Class = '1'
AND Table1.Category = Table2.Category
GROUP BY Table1.Category ORDER BY RAND()
可能重复的查看功能
RAND
usegroupby
谢谢Marc B。实际上我的有点不同,我的整个场景是:我有一个库存(SQL);我使用了2个序列号,项目编号和类别编号。我有大约1000个项目和大约750个类别。我需要在PHP中执行一个循环来显示所有类别,并且只需要为每个类别显示一个随机项。我想我不能用“联合所有人”。。是的,改变库存格式不是一个选择它是一个很好的设计来创建一个单独的表名为Categories是的,我同意Kazi Tanvir Ahsan。。但是我对如何应用Peterm解决方案有点困惑嗨,Peterm,这看起来很棒!我将尝试这个,稍后发布更新。非常感谢!令人惊叹的!这就像charm,即使不加入第二个表。这依赖于MySQL group by扩展,这些扩展被明确记录为不安全的:。它看起来有点类似于Peterm。。我想坚持使用Peterm解决方案。不管怎样,谢谢你,我想这也行,不过我想坚持使用Peterm解决方案。无论如何谢谢你