简体   繁体   中英

Sort the order of “ORDER BY” query

I need to somehow order the ORDER BY column by using another table's order.

Table that contains sort:

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`),
);

Keep in mind that BUTTON_SORT can be null.

Table that needs grouping:

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`),
);

I currently use this query:

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

What this ends up doing is that it will group everything correctly, but the order of which it is printed is just alphabetical. I need to sort the groups by order of BUTTON_SORT instead. I have no idea where to start for this.

EDIT: I apologize, TICKET_PRINT_CAT and CATEGORY_NAME are relative.

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

You need to use joins here. This creates a result set that can have values from both tables, and also can be ordered or grouped by values from either table.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM