gpt4 book ai didi

php - MySQL:如何对每个 WHERE 过滤器进行限制查询

转载 作者:行者123 更新时间:2023-11-29 04:34:13 24 4
gpt4 key购买 nike

我需要执行一个按 ID 过滤的查询,但我需要限制每个 ID 的结果。我不知道如何在一个查询中执行此操作,我只能用 PHP 循环每个 ID,为每次迭代执行查询,然后将结果合并在一起:

$allResults = [];
$ids = [1, 2, 3, 4, 5];

foreach ($ids as $id) {

$db->query("
SELECT *
FROM example_table
WHERE example_id = $id
ORDER BY rating DESC
LIMIT 2
");
$results = $db->getResults();

$allResults = array_merge($allResults, $results);
}

上面的内容满足了我的需要,但是我如何在一个查询中而不是 5 个查询的循环中执行此操作?

我正在寻找这样的东西:

    SELECT *
FROM example_table
WHERE
example_id = 1 LIMIT 2 OR
example_id = 2 LIMIT 2 OR
example_id = 3 LIMIT 2 OR
example_id = 4 LIMIT 2 OR
example_id = 5 LIMIT 2
ORDER BY rating DESC

显然,where 子句中的限制会引发错误,但您可以看到我要实现的目标。任何帮助表示赞赏。

最佳答案

正如@Strawberry 提到的,如果没有可验证的示例和数据,很难给出正确的答案,但这就是查询的样子,因为 mysql 尚不支持组排名函数。

SELECT * FROM
(SELECT *,
@f_rank := IF(@f_rating = rating AND @f_id = id, @f_rank + 1, 1) AS rank,
@f_rating := rating,
@f_id := id
FROM example_table
WHERE id IN (1, 2, 3, 4, 5)
ORDER BY id, rating DESC) tmp_table
WHERE tmp_table.rank <= 2

您在这里需要做的是对每个 id 从 1 到 n 的所有评级进行排序。然后选择前两个ID。

关于php - MySQL:如何对每个 WHERE 过滤器进行限制查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com