【问题标题】:Sort the order of "ORDER BY" query排序“ORDER BY”查询的顺序
【发布时间】:2013-12-22 20:40:00
【问题描述】:

我需要使用另一个表的顺序以某种方式对 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 是相对的。

【问题讨论】:

  • 是否有将这些表连接在一起的键?
  • 是的,我编辑了我的帖子来做到这一点。 TICKET_PRINT_CAT 和 CATEGORY_NAME 是相对的。

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


【解决方案1】:
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

【讨论】:

  • 谢谢,这正是我所需要的。
【解决方案2】:

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

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

【讨论】:

  • 这也是正确的,我接受了另一个答案,因为它更相关,但这更通用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2014-03-27
  • 2018-04-14
  • 1970-01-01
相关资源
最近更新 更多