php - 如何编写查询以不断获取行直到满足条件

标签 php mysql

假设我有以下表格:

表:主题
列: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/

相关文章:

mysql - 对数字范围列进行排序

python - 每次创建父对象时创建外键对象的实例

php - 不将表单字段保存到数据库

php - (UPD) 在 yii 上不限制表格输入

php - Laravel 在 json 中搜索查询中的值 where

php - 内联MySQL图片展示

mysql - 添加 4 个额外的列到 +60col 表或将它们分拆到一个新的?

php - "WHERE NOT EXISTS"和 "SELECT 1 FROM"的组合不起作用

javascript - 如何使用iframe从我的网站查看pdf?

javascript - PHP - Onchange 重新加载具有 select 值的页面