ORDER BY 字段内的 MySQL 子查询.(无内连接) [英] MySQL subquery inside ORDER BY field. (without Inner Join)

查看:53
本文介绍了ORDER BY 字段内的 MySQL 子查询.(无内连接)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有很多与此相关的问题,但都有使用内连接的相同答案,这(我认为)在这里是不可能的.(如果我错了就说)

我现在正在做的是调用两个不同的 mysql 查询来获取结果.它完美运行.

What I am doing now is calling two different mysql query to get result. It works perfectly.

$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();

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

Now to reduce number of queries I tried something like,

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

它没有显示任何错误,但它给了我错误的输出.有没有办法做到这一点?

It doesn't show any error, but it gives me wrong output. Is there any way to do this?

编辑

categories 表的结构,

categories table's structure,

_________________
| 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 来做到这一点.

I can't really see a way to do it directly using ORDER BY FIELD.

但是我想知道您是否可以对元表进行 JOIN,然后按 FIND_IN_SET 进行 ORDER BY.

However I wonder if you could do a JOIN against the meta table and then ORDER BY a FIND_IN_SET.

未对此进行测试,但希望能给您提供思路:-

Not tested this, but hopefully will give you the idea:-

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

Possibly the FIND_IN_SET on the JOIN isn't necessary

这篇关于ORDER BY 字段内的 MySQL 子查询.(无内连接)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆