php - SELECT * FROM table WHERE field IN (SELECT id FROM table ORDER BY field2)

标签 php sql mysql select

我有 4 个表:

categories - id, position
subcategories - id, categories_id, position
sub_subcategories - id, subcategories_id, position
product - id, sub_subcategories_id, prod_pos

现在我正在做测试以找出我的查询有什么问题。

所以我想选择 sub_subcategories,并得到类似的东西:

[[1,2,3,4,5,6], [1,2,3,4,5,6,7]], [[1,2,3,4,5,6], [1,2,3,4]]

每个 [] 表示:大 - 类别,小 - 子类别,数字在 sub_subcategories 中的位置。我希望 [] 按其“位置”字段排序,因此查询:

SELECT id FROM sub_subcategories_id 
WHERE subcategories_id IN (
       SELECT id 
       FROM subcategories_id 
       WHERE categories_id IN (
            SELECT id FROM categories 
            WHERE id = 'X' ORDER BY position) 
            ORDER BY position) 
ORDER BY position

有点不对,因为我得到:

1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7

不知道为什么 - 最后的“ORDER BY position”会破坏一切吗?

最佳答案

您需要在最外层查询中应用所有您想要的排序 - 子查询中的排序没有任何意义 - 问题“此 ID 在 <此列表> 中吗?”有相同的答案,无论列表是什么顺序(事实上,更多的属性,是一个集合,没有顺序)。

因此,您需要在最外层查询中获取需要排序的所有列。

类似于:

SELECT ssi.ID
from
    sub_subcategories_id ssi
        inner join
    subcategories_id si
        on
            ssi.subcategories_id = si.id
        inner join
    categories c
        on
           si.categories_id = c.id
where
    c.id = 'X'
order by
    c.position,
    si.position,
    ssi.position

关于php - SELECT * FROM table WHERE field IN (SELECT id FROM table ORDER BY field2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3608880/

相关文章:

php - 在 Homestead 上调用具有特定 PHP 版本的 Composer

php - 仅断言模拟调用的单元测试

Mysql——一个查询中有 2 个计数,错误的第二个计数结果

PHP MySQL查询多个类别的多个产品

php - FFMPEG 与 php 5.3?

php - PHP 中的 Javascript .toString(16)

mysql - 如何在 MySQL 中找到 "Delete rows ignoring errors"?

sql - 如何加快缓慢的 UPDATE 查询

mysql - 选择除多个 ID 之外的所有 ID

mysql - 3 表连接计数空值