gpt4 book ai didi

php - 在 mysql 中处理结果查询

转载 作者:行者123 更新时间:2023-11-29 06:52:35 25 4
gpt4 key购买 nike

在 Mysql 中,我的查询得到了这种结果

+-id-+-name--+is_active-+---date---+
| 1 | name1 | 1 | 21231321 |
| 3 | name3 | 1 | 11313213 |
| 4 | name9 | 1 | 10313213 |
| 8 | name3 | 1 | 10013213 |
| 54 | name2 | 0 | 0 |
| 9 | name5 | 0 | 0 |
| 11 | name8 | 0 | 0 |

我想从此结果查询中进行多项选择,而不是再次选择此查询。

从上面的结果查询中,我想将这三个条件合二为一

1.Give me first two rows (result query above is sorted by date)
2.Give me one random row where is_active = 1 and not in results in 1.
3.Give me one random row where is_active = 0

我阅读了有关数据库 View 存储过程 的内容,但我不知道这是否是最佳方式?

有人可以为此提供 MySQL 代码吗?

谢谢

最佳答案

对于一个小的结果集,如评论中所述的 50-100 行,PHP 的数组处理工具可以很容易地处理您的要求。假设您的行集已在查询输出中排序

ORDER BY 
date DESC,
is_active DESC

...您可以使用您正在使用的任何 API 在 PHP 中将所有行提取到一个数组中:

// To store output:
$results = array();

// Using the appropriate fetch call (assuming an associative array here)
while ($row = $result_resource->fetch()) {
// append row onto results
$results[] = $row;
}

// Remove the first 2 - your first requirement:
$first_two = array_splice($results, 0, 2);

$active = array();
$inactive = array();
// Then split the remaining into is_active or not is_active with a loop
foreach ($results as $r) {
if ($r['is_active'] == 1) {
$active[] = $r;
}
else $inactive[] = $r;
}

// Then you can just call `array_rand()` to get results from those
$rand_active = array_rand($active);
$rand_inactive = array_rand($inactive);

我会再次声明,所有这一切都取决于行集是否较小。数组和循环的开销可能会少于多个查询调用。但是,如果行集很大,我会使用 3 个单独的查询。

第一个:

ORDER BY 
date DESC
is_active DESC
LIMIT 2

从该查询中获取行并获取 ID。再次执行:

WHERE
is_active = 1
/* the 2 ids from the first query */
AND id NOT IN (id1, id2)
ORDER BY RAND()
LIMIT 1

第三个查询:

WHERE is_active = 0
ORDER BY RAND()
LIMIT 1

所有这三个都可以打包到一个UNION ALL查询中,但我只会在性能非常差的情况下考虑。

关于php - 在 mysql 中处理结果查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547398/

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