按“ORDER BY”查询的顺序排序

时间:2013-12-05 18:35:12

标签: mysql sql sorting group-by sql-order-by

我需要以某种方式使用另一个表的顺序来订购ORDER BY列。

包含排序的表:

CREATE TABLE IF NOT EXISTS `menu_category` (
  `CATEGORY_ID` int(11) NOT NULL AUTO_INCREMENT,
  `CATEGORY_NAME` varchar(20) NOT NULL,
  `BUTTON_SORT` int(11) DEFAULT NULL,
  PRIMARY KEY (`CATEGORY_ID`),
  UNIQUE KEY `CATEGORY_NAME` (`CATEGORY_NAME`),
);

请记住,BUTTON_SORT可以为空。

需要分组的表:

CREATE TABLE IF NOT EXISTS `ticket_item` (
  `TICKET_ITEM_ID` int(11) NOT NULL AUTO_INCREMENT,
  `TICKET_ITEM_DESC` varchar(30) NOT NULL,
  `TICKET_PRINT_CAT` varchar(40) NOT NULL,
  PRIMARY KEY (`TICKET_ITEM_ID`),
);

我目前使用此查询:

SELECT 
   TICKET_ITEM_ID, 
   TICKET_ITEM_DESC 
FROM ticket_item
WHERE 
   ticket_item.TICKET_ID = 1 
GROUP BY TICKET_PRINT_CAT

这最终会做的是它会正确地对所有内容进行分组,但是它的打印顺序只是按字母顺序排列。我需要按BUTTON_SORT的顺序对组进行排序。我不知道从哪里开始。

编辑:我道歉,TICKET_PRINT_CAT和CATEGORY_NAME是亲戚。

2 个答案:

答案 0 :(得分:2)

SELECT 
   TICKET_ITEM_ID, 
   TICKET_ITEM_DESC 
FROM ticket_item
INNER JOIN menu_category ON menu_category.CATEGORY_NAME=ticket_item.TICKET_PRINT_CAT
WHERE 
   ticket_item.TICKET_ID = 1 
GROUP BY TICKET_PRINT_CAT
ORDER BY menu_category.BUTTON_SORT

答案 1 :(得分:1)

您需要在此处使用联接。这将创建一个结果集,该结果集可以包含两个表中的值,也可以按任一表中的值进行排序或分组。

SELECT
     ticket_item.TICKET_ITEM_ID, ticket_item.TICKET_ITEM_DESC 
FROM ticket_item
LEFT JOIN table2 on ticket_item.someColumnOnTable1 = table2.someColumnOnTable2
ORDER BY table2.whateverColumnYouWantToOrderBy