Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL显示整个组,在组内按字母顺序排序_Mysql - Fatal编程技术网

MySQL显示整个组,在组内按字母顺序排序

MySQL显示整个组,在组内按字母顺序排序,mysql,Mysql,我有以下疑问: SELECT * FROM vendors_parts INNER JOIN vendors ON vendors_parts.vendor = vendors.vendor_id WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active =

我有以下疑问:

SELECT * 

FROM vendors_parts INNER JOIN 

vendors ON vendors_parts.vendor = vendors.vendor_id

WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR

(vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)

ORDER BY vendors_parts.old_id, vendors_parts.vendor_part, date_start DESC, vendors_parts.active DESC
以以下格式返回数据:

vendor_part      active       old_id
b                1            1
a                0            1
a                0            1
b                0            1
x                1            3
z                1            5
c                1            20
c                0            20
我的问题是,在对供应商零件进行升序和活动降序排序时,如何将旧的\u id保持在一起?我想要的输出是:

vendor_part      active       old_id
b                1            1
a                0            1
a                0            1
b                0            1
c                1            20
c                0            20
x                1            3
z                1            5
我还尝试了一个子查询,该查询根据旧\u id分组,但这将我限制为只有一个唯一的旧\u id:

SELECT *

FROM 
     (
     SELECT * FROM vendors_parts INNER JOIN vendors ON vendors_parts.vendor = vendors.vendor_id
     WHERE (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @active) OR (vendors_parts.vendor = @vendor_id) AND (vendors_parts.active = @inactive)
     GROUP BY vendors_parts.old_id
     ) temp_table
ORDER BY vendor_part
如何显示分组在一起的所有旧\u ID,并在其各自的组中按供应商\u部分的字母顺序进行排序


谢谢

这里有一个可能的答案。请注意,在这个答案中,表
tbl
是实际(相当复杂)查询的占位符(我不喜欢使用它,但您可能必须使用临时表来保持查询语法的可管理性):


请参阅以获取实时演示。正如您将看到的,使用您在问题中给出的示例,它产生了预期的结果。

我向sqlfidle添加了我的模式和一些示例数据:放置sqlfiddle很好,但您可能应该缩小您的用例范围。也许只限于你在问题中给出的例子。谢谢你的帮助。似乎使用命令是我与临时表一起缺少的。关于结果,我确实有一个问题。。看看我是如何修改你的答案的。你知道供应商的零件不总是按字母顺序排列吗?2新名字3。。。etc@chureema在所有条件相同的情况下,如果您希望按
供应商部分对行进行排序
,则只需将其添加到
ORDER by
子句中即可。我据此编辑了他的答案。看见
SELECT tbl.* FROM tbl 
  JOIN (SELECT MIN(vendor_part) as mvp, old_id FROM tbl GROUP BY old_id) as driver
  USING (old_id)
  ORDER BY driver.mvp, tbl.old_id, active DESC, tbl.vendor_part