gpt4 book ai didi

php - ORDER BY 字段内的 MySQL 子查询。 (没有内部连接)

转载 作者:行者123 更新时间:2023-11-29 02:29:29 26 4
gpt4 key购买 nike

有很多与此相关的问题,但都对使用内部联接有相同的答案,这(我认为)在这里是不可能的。 (如果我错了告诉我)

我现在正在做的是调用两个不同的 mysql 查询来获取结果。效果很好。

$db->query("SELECT * FROM `meta` WHERE `metakey` = 'category_order'");
$order = $db->fetch_assoc()['metavalue'];
/*$order = 2,1,12,11,10*/

$db->query("SELECT * FROM `categories` WHERE `parent` = '0' ORDER BY field(ID, $order)");
$cats = $db->fetch();

现在为了减少查询的数量,我尝试了类似的方法,

$db->query("SELECT * FROM `categories` WHERE `parent` = '0' ORDER BY field(ID, (SELECT 'metavalue' FROM `meta` WHERE `metakey` = 'category_order'))");

它没有显示任何错误,但它给了我错误的输出。有什么办法吗?

编辑

类别表的结构,

_________________
| ID | name |
-----------------
| 1 | A |
| 2 | B |
| 11 | C |
| 12 | D |
| 10 | E |
-----------------

元表的结构,

______________________________________
| ID | metakey | metavalue |
--------------------------------------
| 1 | category_order | 2,1,12,11,10 |
--------------------------------------

最佳答案

我真的看不出有什么方法可以直接使用 ORDER BY FIELD。

但是我想知道您是否可以对元表执行 JOIN,然后按 FIND_IN_SET 进行排序。

没有测试过这个,但希望能给你一个想法:-

SELECT * 
FROM `categories`
INNER JOIN meta ON metakey = 'category_order' AND FIND_IN_SET(categories.ID,metavalue)
WHERE `parent` = '0'
ORDER BY FIND_IN_SET(categories.ID,metavalue)

可能 JOIN 上的 FIND_IN_SET 不是必需的

关于php - ORDER BY 字段内的 MySQL 子查询。 (没有内部连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362215/

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