假设我有以下表格:
表:主题
列:topicId
表:主题权限
COLUMNs: topicId, teamId
我想编写一个查询来提取 10 个唯一主题 ID 及其所有关联的权限行。每个主题 ID 都可以分配多个 topicPermission 行,但我只想要 10 个不同的主题 ID。
SELECT topic.topicId, topicPermission.teamId FROM topic LEFT JOIN topicPermissions ON topicId LIMIT 10
显然这不起作用,因为它将它限制为 10 行。任何帮助表示赞赏。
只是进一步澄清:另一种实现此目的的方法是不断从主题权限中提取行,直到主题权限具有 10 个不同的主题 ID。这可能吗?
谢谢。
最佳答案
这可能有效:
SELECT `TP`.`topicId`, `PM`.`teamId`
FROM (SELECT `topicId`
FROM `topic`
LIMIT 10
) `TP`
LEFT JOIN `topicPermissions` `PM` ON `TP`.`topicId` = `PM`.`topicId`;
希望对您有所帮助!
编辑 1: 这是上述查询的测试运行。
表“topic”有13条记录:
mysql> select * from topic;
+---------+
| topicId |
+---------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
+---------+
13 rows in set (0.00 sec)
表“topicPermissions”有 4 个 topicId = 1 的条目和 2 个 topicId = 5 的条目:
mysql> select * from topicPermissions;
+---------+--------+
| topicId | teamId |
+---------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 5 | 1 |
| 5 | 9 |
+---------+--------+
6 rows in set (0.00 sec)
结果:
mysql> SELECT `TP`.`topicId`, `PM`.`teamId`
-> FROM (SELECT `topicId`
-> FROM `topic`
-> LIMIT 10
-> ) `TP`
-> LEFT JOIN `topicPermissions` `PM` ON `TP`.`topicId` = `PM`.`topicId`;
+---------+--------+
| topicId | teamId |
+---------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
| 5 | 1 |
| 5 | 9 |
| 6 | NULL |
| 7 | NULL |
| 8 | NULL |
| 9 | NULL |
| 10 | NULL |
+---------+--------+
14 rows in set (0.00 sec)
据我从您的问题中了解到,查询为您提供了 10 个不同的主题 ID 以及每个主题 ID 的所有 topicPermissions。没有?
请注意,如果您需要选择特定的主题 ID,您可以更改下面的派生表查询以读取所需的主题:
SELECT `topicId` FROM `topic` LIMIT 10;
关于php - 如何编写查询以不断获取行直到满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105858/