Что НЕПРАВИЛЬНО с запросом MySQL? Медленно, с пустыми полями - PullRequest
0 голосов
/ 18 июня 2020

На работе я должен выполнить бизнес-требование к системе, которую я создаю. Это стартап, поэтому я ношу несколько шляп. Это не моя сильная сторона.

Среди многих других API-интерфейсов есть один, в котором мы должны сделать HTTP-запрос к API-интерфейсам данных для базы данных MySQL 5.7 для системы Point of Sale.

Есть некоторые заминки:

  1. API не включает много сообщений об ошибках, таких как синтаксические ошибки. Я получаю 521, если, например, пытаюсь добавить в результат ключи с тем же именем.

  2. API практически не документирован.

Нам нужны продажи всех заказанных товаров, которые были закрыты в заданную дату Close_Date. Эта информация размещена в нескольких таблицах:

  1. orders: содержит все заказы, невыполненные (Closed=0) или завершенные (Closed=1), а также дату закрытия кассы (Close_Date). Он не знает, что это за заказы, но имеет промежуточный итог, налоговую информацию и другие данные, которые здесь не актуальны.

  2. orders_item: содержит все позиции, которые были заказаны и связаны с заказом в поле `orders_item.Order_ID = orders.ID.

    • itemID присваивается элементу при его заказе. Как указано выше, заказ состоит из элементов по `itemID. Каждый товар связан с заказом по его идентификатору заказа. Строка, представляющая элемент, имеет уникальный идентификатор itemPLU. Это обязательная информация. В этой таблице ничего не известно об изменениях («ингредиентах» или «опциях»), связанных с заказанным товаром.
  3. orders_options: содержит параметры, которые есть с ди sh, какой суп, какой десерт. Опция связана с элементом, заказанным в поле itemID. Опции имеют дополнительную стоимость, и, поскольку они solid предметов, должны быть учтены в инвентаре, поэтому мы должны знать.

  4. orders_ingredients: содержит вещи, которые вы можете добавить к ди sh, например, дополнительный сыр или начинка в пицце или острый майонез в бутерброде с кубано вместо обычного. Ингредиент, который был заказан, связан с заказанным товаром с помощью поля itemID.

Строка в допустимом результате будет выглядеть так, как будто состоит из товара, заказанного в дату, указанную Close_Date. Значения в возвращаемых столбцах дают полную запись проданного предмета, уникальные идентификаторы ('**** PLU') для предметов, опций и ингредиентов будут сопоставлены с предметами в базе данных инвентаризации клиента на нашей платформе, после некоторого парсинг. Эти предметы имеют долларовую стоимость и представляют собой инвентарь, который необходимо учитывать.

Частичная схема

Вот сам код:


#MySQL 5.7.12
#please drop objects you've created at the end of the script 
#or check for their existance before creating
#'\\' is a delimiter

select version() as 'mysql version';

#
# TABLE STRUCTURE FOR: orders
#

DROP TABLE IF EXISTS `orders`;

CREATE TABLE `orders` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Date` datetime NOT NULL,
  `DateClose` datetime NOT NULL,
  `DatePreorder` datetime DEFAULT NULL,
  `Table_ID` smallint(4) unsigned NOT NULL DEFAULT 0,
  `Client_ID` smallint(4) unsigned NOT NULL,
  `User_ID` smallint(5) unsigned NOT NULL,
  `Delivery_ID` mediumint(5) unsigned NOT NULL,
  `SubTotal` decimal(13,4) NOT NULL,
  `Tax1` decimal(13,4) NOT NULL,
  `Tax2` decimal(13,4) NOT NULL,
  `Tax3` decimal(13,4) NOT NULL,
  `Tax4` decimal(13,4) NOT NULL,
  `Tax5` decimal(13,4) NOT NULL,
  `Tax6` decimal(13,4) NOT NULL,
  `NonTaxable` decimal(13,4) NOT NULL,
  `NonSale` decimal(13,4) NOT NULL,
  `Tax_Rounding` decimal(13,4) NOT NULL,
  `Total` decimal(13,4) NOT NULL,
  `Device` tinyint(2) unsigned NOT NULL DEFAULT 0,
  `Client_Name` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL,
  `Profile_ID` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `Bill` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `Completed` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `Closed` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `Prepared` tinyint(1) unsigned NOT NULL,
  `Close_Date` datetime DEFAULT NULL,
  `Note` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `Reason` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `Void_By` smallint(5) unsigned NOT NULL,
  `IP` tinyint(3) unsigned NOT NULL DEFAULT 0,
  `Deleted` tinyint(1) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `Closed` (`Closed`,`Deleted`,`Completed`),
  KEY `DateClose` (`DateClose`,`Deleted`,`Completed`),
  KEY `Table_ID` (`Table_ID`,`Deleted`,`Completed`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='All Order information'
 PARTITION BY RANGE (`ID`)
(PARTITION `pYear` VALUES LESS THAN (5) ENGINE = InnoDB,
 PARTITION `pCurrent` VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (1, '2019-08-10 14:13:48', '2020-06-08 04:25:15', '2019-08-08 07:38:29', 55, 0, 0, 0, '1620.9100', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'fli', '', 0, 0, 1, 0, '2020-06-13 22:04:35', 'Odio minima et blanditiis sunt numquam.', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (2, '2019-10-11 14:14:52', '2019-08-01 16:12:46', '2020-03-10 17:23:23', 20, 0, 0, 0, '2099.8200', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'xslt', '', 0, 0, 1, 0, '2019-12-24 17:08:24', 'Impedit facere culpa autem libero.', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (3, '2020-06-12 04:51:41', '2020-03-01 23:53:55', '2019-07-13 12:40:22', 46, 0, 0, 0, '224.7000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'twds', '', 0, 0, 1, 0, '2020-02-03 17:32:05', 'Et dolorem eum consequatur et vitae sed. ', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (4, '2019-10-05 16:20:34', '2019-10-14 17:10:30', '2020-05-23 21:10:45', 6, 0, 0, 0, '791.7700', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'sitx', '', 0, 0, 1, 0, '2019-12-17 22:56:45', 'Et quidem perferendis .', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (5, '2019-07-25 06:14:04', '2019-09-07 16:22:43', '2019-08-10 23:09:17', 13, 0, 0, 0, '197.5300', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'wcm', '', 0, 0, 1, 0, '2020-06-13 22:04:35', 'Magnam facilis magni .', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (6, '2020-06-06 09:53:50', '2019-08-14 16:13:30', '2020-03-03 03:04:10', 12, 0, 0, 0, '1360.5000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'wm', '', 0, 0, 1, 0, '2019-07-16 19:29:05', 'Odio aut voluptatem ', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (7, '2019-09-12 09:29:49', '2019-09-25 13:15:44', '2020-03-16 10:09:15', 37, 0, 0, 0, '1574.0400', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'torrent', '', 0, 0, 0, 0, '2019-08-18 15:44:07', 'Quia veniam fugit necessitatibus laboriosam accusamus nihil. Reiciendis delectus repellendus minus.', '', 0, 255, 0);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (8, '2020-03-18 11:10:46', '2019-11-12 19:37:15', '2020-02-02 19:59:45', 10, 0, 0, 0, '628.2900', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'sv4crc', '', 0, 0, 1, 0, '2019-09-08 23:21:28', 'Repellat possimus quod excepturi.', '', 0, 255, 1);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (9, '2019-09-14 19:16:31', '2020-02-19 14:04:16', '2020-02-18 18:13:03', 14, 0, 0, 0, '2067.1800', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'h263', '', 0, 0, 0, 0, '2020-03-29 10:20:48', 'Aut quis nemo provident dolorum numquam rerum explicabo. ', '', 0, 255, 1);
INSERT INTO `orders` (`ID`, `Date`, `DateClose`, `DatePreorder`, `Table_ID`, `Client_ID`, `User_ID`, `Delivery_ID`, `SubTotal`, `Tax1`, `Tax2`, `Tax3`, `Tax4`, `Tax5`, `Tax6`, `NonTaxable`, `NonSale`, `Tax_Rounding`, `Total`, `Device`, `Client_Name`, `Profile_ID`, `Bill`, `Completed`, `Closed`, `Prepared`, `Close_Date`, `Note`, `Reason`, `Void_By`, `IP`, `Deleted`) VALUES (10, '2019-12-28 20:13:14', '2020-04-04 13:48:34', '2020-04-04 17:41:15', 19, 0, 0, 0, '2063.3100', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', '0.0000', 0, 'sid', '', 0, 0, 1, 0, '2020-06-13 22:04:35', 'Aliquam dolores voluptates repellendus voluptatem omnis sit doloribus explicabo.', '', 0, 255, 0);


#
# TABLE STRUCTURE FOR: orders_ingredient
#

DROP TABLE IF EXISTS `orders_ingredient`;

CREATE TABLE `orders_ingredient` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Item_ID` int(11) unsigned NOT NULL DEFAULT 0,
  `Ingredient_uid` int(10) unsigned NOT NULL,
  `Change_uid` int(10) unsigned NOT NULL,
  `Account` int(10) unsigned NOT NULL,
  `Name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `Price` decimal(13,4) NOT NULL,
  `Tax_Type` tinyint(2) unsigned NOT NULL DEFAULT 31,
  `Qty` smallint(4) NOT NULL DEFAULT 1,
  `Modifier` tinyint(2) unsigned NOT NULL,
  `Modified` datetime NOT NULL DEFAULT current_timestamp(),
  `Deleted` tinyint(1) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `Account` (`Account`,`Deleted`),
  KEY `Item_ID` (`Item_ID`,`Modifier`,`Deleted`,`Price`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='individual item per order'
 PARTITION BY RANGE (`ID`)
(PARTITION `pYear` VALUES LESS THAN (2) ENGINE = InnoDB,
 PARTITION `pCurrent` VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (1, 1, 800, 0, 2, 'a', '1.5600', 31, 20, 0, '2019-07-12 20:17:09', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (2, 2, 1130, 0, 3, 'e', '4.6300', 31, 1, 0, '2019-08-15 15:29:30', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (3, 3, 948, 0, 8, 'v', '0.9100', 31, 17, 0, '2020-02-25 20:47:51', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (4, 4, 987, 0, 5, 'e', '3.4800', 31, 12, 0, '2019-07-14 01:06:13', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (5, 5, 856, 0, 3, 'x', '2.1600', 31, 5, 0, '2020-01-11 19:28:40', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (6, 6, 1098, 0, 2, 'y', '1.0300', 31, 3, 0, '2019-09-27 15:54:23', 0);
INSERT INTO `orders_ingredient` (`ID`, `Item_ID`, `Ingredient_uid`, `Change_uid`, `Account`, `Name`, `Price`, `Tax_Type`, `Qty`, `Modifier`, `Modified`, `Deleted`) VALUES (7, 7, 1102, 0, 7, 'c', '2.8000', 31, 21, 0, '2020-06-04 13:15:17', 0);


#
# TABLE STRUCTURE FOR: orders_item
#

DROP TABLE IF EXISTS `orders_item`;

CREATE TABLE `orders_item` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Order_ID` int(11) unsigned NOT NULL DEFAULT 0,
  `Item_uid` int(10) unsigned NOT NULL,
  `Account` int(10) unsigned NOT NULL,
  `Name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `Qty` smallint(4) NOT NULL DEFAULT 1,
  `Unit_Qty` decimal(13,4) NOT NULL DEFAULT 1.0000,
  `Unit_Type` tinyint(2) unsigned NOT NULL DEFAULT 0,
  `Price` decimal(13,4) NOT NULL,
  `Tax_Type` tinyint(2) unsigned NOT NULL DEFAULT 31,
  `SplitID` int(11) unsigned NOT NULL DEFAULT 0,
  `SplitBy` tinyint(2) unsigned NOT NULL DEFAULT 1,
  `Category` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `Combo` int(11) unsigned NOT NULL DEFAULT 0,
  `Service` tinyint(3) unsigned NOT NULL DEFAULT 0,
  `Type` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `Printed` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `PrintDate` datetime NOT NULL,
  `Bill` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `Note` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `Reason` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `Void_By` smallint(5) unsigned NOT NULL,
  `Modified` datetime NOT NULL DEFAULT current_timestamp(),
  `Deleted` tinyint(1) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`ID`),
  KEY `Combo` (`Combo`) USING BTREE COMMENT 'IMPORTANT GetComboItems',
  KEY `Order_ID` (`Order_ID`,`Type`,`Deleted`,`Price`) USING BTREE,
  KEY `Account` (`Account`,`Deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='individual item per order'
 PARTITION BY RANGE (`ID`)
(PARTITION `pYear` VALUES LESS THAN (23) ENGINE = InnoDB,
 PARTITION `pCurrent` VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (1, 1, 3621, 90, '#009933', 20, '1.0000', 0, '2450.1800', 31, 0, 1, '9', 0, 0, 0, 0, '2019-07-23 05:35:33', 0, 'dicta', '', 0, '2020-03-16 23:05:47', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (2, 2, 1568, 0, '#00bb77', 3, '4.0000', 0, '936.3600', 31, 0, 1, '1', 0, 0, 0, 0, '2019-07-07 18:35:31', 0, 'consectetur', '', 0, '2019-08-14 15:27:05', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (3, 3, 9859, 2995758, '#00ff33', 7, '0.0000', 0, '1549.5800', 31, 0, 1, '4', 0, 0, 0, 0, '2020-06-17 04:05:57', 0, 'dolores', '', 0, '2019-12-23 09:07:34', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (4, 4, 5846, 8, '#00eeff', 14, '0.0000', 0, '1893.3800', 31, 0, 1, '7', 0, 0, 0, 0, '2020-05-03 07:36:27', 0, 'aut', '', 0, '2019-11-11 11:30:45', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (5, 5, 510, 55, '#0099bb', 1, '4.0000', 0, '1108.7100', 31, 0, 1, '1', 0, 0, 0, 0, '2019-11-10 03:00:26', 0, 'eligendi', '', 0, '2019-11-27 00:08:59', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (6, 6, 2351, 9420, '#007799', 14, '2.0000', 0, '1556.5000', 31, 0, 1, '9', 0, 0, 0, 0, '2020-04-07 16:30:04', 0, 'nam', '', 0, '2020-02-08 08:42:30', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (7, 7, 1466, 820, '#00cc77', 2, '5.0000', 0, '847.8000', 31, 0, 1, '9', 0, 0, 0, 0, '2019-10-30 16:22:48', 0, 'dolores', '', 0, '2019-08-08 08:03:33', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (8, 8, 8385, 807043258, '#0000ff', 7, '3.0000', 0, '291.0200', 31, 0, 1, '1', 0, 0, 0, 0, '2019-10-04 22:45:04', 0, 'aut', '', 0, '2019-10-29 01:09:58', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (9, 9, 2881, 21212542, '#009900', 17, '2.0000', 0, '1534.5200', 31, 0, 1, '6', 0, 0, 0, 0, '2019-10-27 03:26:07', 0, 'omnis', '', 0, '2020-03-05 01:17:56', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (10, 10, 3370, 648377, '#00ffcc', 14, '3.0000', 0, '2194.2900', 31, 0, 1, '4', 0, 0, 0, 0, '2020-02-09 13:08:07', 0, 'praesentium', '', 0, '2019-08-03 01:21:33', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (11, 1, 9632, 13229430, '#0022aa', 3, '4.0000', 0, '1481.0600', 31, 0, 1, '3', 0, 0, 0, 0, '2020-05-11 11:25:09', 0, 'magnam', '', 0, '2019-10-23 06:04:10', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (12, 2, 3025, 4796898, '#001122', 23, '0.0000', 0, '245.7700', 31, 0, 1, '2', 0, 0, 0, 0, '2019-06-27 13:08:55', 0, 'quod', '', 0, '2019-11-06 09:02:43', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (13, 3, 3658, 792, '#006677', 21, '0.0000', 0, '2151.8600', 31, 0, 1, '8', 0, 0, 0, 0, '2020-04-28 18:58:46', 0, 'ut', '', 0, '2019-10-05 02:12:20', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (14, 4, 590, 139, '#0077cc', 24, '0.0000', 0, '2328.8900', 31, 0, 1, '7', 0, 0, 0, 0, '2020-06-04 14:00:04', 0, 'et', '', 0, '2020-06-11 07:34:12', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (15, 5, 2551, 0, '#005599', 24, '4.0000', 0, '1370.6000', 31, 0, 1, '6', 0, 0, 0, 0, '2020-06-03 04:39:05', 0, 'quo', '', 0, '2019-12-29 07:27:46', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (16, 6, 447, 4573, '#008811', 14, '5.0000', 0, '161.5300', 31, 0, 1, '9', 0, 0, 0, 0, '2020-02-02 03:33:55', 0, 'facilis', '', 0, '2019-11-08 01:46:56', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (17, 7, 3342, 9994, '#00aabb', 5, '2.0000', 0, '839.2600', 31, 0, 1, '6', 0, 0, 0, 0, '2019-10-12 21:05:22', 0, 'non', '', 0, '2020-04-08 17:05:52', 0);
INSERT INTO `orders_item` (`ID`, `Order_ID`, `Item_uid`, `Account`, `Name`, `Qty`, `Unit_Qty`, `Unit_Type`, `Price`, `Tax_Type`, `SplitID`, `SplitBy`, `Category`, `Combo`, `Service`, `Type`, `Printed`, `PrintDate`, `Bill`, `Note`, `Reason`, `Void_By`, `Modified`, `Deleted`) VALUES (18, 8, 189, 0, '#003311', 6, '3.0000', 0, '1895.1300', 31, 0, 1, '7', 0, 0, 0, 0, '2019-08-14 03:41:34', 0, 'quaerat', '', 0, '2020-05-16 10:10:44', 0);


#
# TABLE STRUCTURE FOR: orders_option
#

DROP TABLE IF EXISTS `orders_option`;

CREATE TABLE `orders_option` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Item_ID` int(11) unsigned NOT NULL DEFAULT 0,
  `Option_uid` int(10) unsigned NOT NULL,
  `Account` int(10) unsigned NOT NULL,
  `Index_ID` tinyint(2) unsigned NOT NULL,
  `Value` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `Price` decimal(13,4) NOT NULL,
  `Tax_Type` tinyint(2) unsigned NOT NULL DEFAULT 31,
  `Qty` smallint(4) NOT NULL,
  `Type` tinyint(2) unsigned NOT NULL,
  `Modified` datetime NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`ID`),
  KEY `Item_ID` (`Item_ID`,`Price`) USING BTREE,
  KEY `Account` (`Account`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='individual item per order'
 PARTITION BY RANGE (`ID`)
(PARTITION `pYear` VALUES LESS THAN (2) ENGINE = InnoDB,
 PARTITION `pCurrent` VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

INSERT INTO `orders_option` (`ID`, `Item_ID`, `Option_uid`, `Account`, `Index_ID`, `Value`, `Price`, `Tax_Type`, `Qty`, `Type`, `Modified`) VALUES (1, 1, 352, 4, 0, 'r', '9.8400', 31, 16, 0, '2019-10-23 18:07:03');
INSERT INTO `orders_option` (`ID`, `Item_ID`, `Option_uid`, `Account`, `Index_ID`, `Value`, `Price`, `Tax_Type`, `Qty`, `Type`, `Modified`) VALUES (2, 2, 238, 9, 0, 'c', '4.8900', 31, 2, 0, '2020-06-18 07:08:15');
INSERT INTO `orders_option` (`ID`, `Item_ID`, `Option_uid`, `Account`, `Index_ID`, `Value`, `Price`, `Tax_Type`, `Qty`, `Type`, `Modified`) VALUES (3, 3, 189, 8, 0, 'y', '10.7900', 31, 2, 0, '2019-08-18 06:51:29');
INSERT INTO `orders_option` (`ID`, `Item_ID`, `Option_uid`, `Account`, `Index_ID`, `Value`, `Price`, `Tax_Type`, `Qty`, `Type`, `Modified`) VALUES (4, 4, 425, 6, 0, 's', '14.5500', 31, 4, 0, '2020-03-26 08:59:29');
INSERT INTO `orders_option` (`ID`, `Item_ID`, `Option_uid`, `Account`, `Index_ID`, `Value`, `Price`, `Tax_Type`, `Qty`, `Type`, `Modified`) VALUES (5, 5, 200, 3, 0, 'n', '13.9000', 31, 17, 0, '2020-01-29 11:05:18');

# Close_Date sorted Descending

SELECT Close_Date, 
       Count(*) 
FROM   orders 
GROUP  BY close_date 
ORDER  BY close_date DESC; 

# Closed Orders
SELECT ID, 
       Closed, 
       Deleted, 
       Close_Date 
FROM   orders 
WHERE  Closed = 1 
       AND DELETED = 0 
GROUP  BY id; 

# Closed Orders on Most Recent Close_Date
SELECT ID, 
       Closed, 
       Deleted,
       Close_Date 
FROM   orders 
WHERE  Closed=1
       AND Deleted=0
       AND Close_Date = (SELECT MAX(Close_Date)
                         FROM orders)
ORDER BY Close_Date DESC;

SELECT * 
FROM   (SELECT * 
        FROM   (SELECT items.ID                   AS itemID, 
                       items.Order_ID             AS itemOrderID, 
                       items.Item_uid             AS itemPLU, 
                       items.Name                 AS itemName, 
                       items.Price                AS itemPrice, 
                       items.Qty                  AS itemQty, 
                       items.Category, 
                       ingredients.Item_ID        AS ingredientItemID, 
                       ingredients.Ingredient_uid AS ingredientPLU, 
                       ingredients.Name           AS ingredientName, 
                       ingredients.Qty            AS ingredientQty, 
                       ingredients.Price          AS ingredientPrice 
                FROM   orders_item AS items 
                       LEFT JOIN orders_ingredient AS ingredients 
                              ON items.ID = ingredients.Item_ID) AS 
               itemsIngredients 
               LEFT JOIN (SELECT Item_ID    AS optionItemID, 
                                 Option_uid AS optionPLU, 
                                 Price      AS optionPrice, 
                                 Value      AS optionName, 
                                 Qty        AS optionQty 
                          FROM   orders_option) AS options 
                      ON itemsIngredients.itemID = options.optionItemID) AS 
       itemsIngredientsOptions 
       LEFT JOIN (SELECT ID         AS orderID, 
                         Table_ID   AS tableID, 
                         Closed     AS isClosed, 
                         Deleted    AS isDeleted, 
                         Close_Date as closeDate 
                  FROM   orders 
                  WHERE  Closed = 1 
                         AND Deleted = 1 
                         AND Close_Date = (SELECT Max(Close_Date) 
                                           FROM   orders)) AS closedOrders 
              ON orderID = closedOrders.orderID; 

Посторонние таблицы и столбцы в БД

В итоге результат, который я получаю, полон дыр, в которых мне нужны данные. Псевдоним становится немного запутанным, и мне трудно отслеживать, откуда я выбираю.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Ну, я полагаю, это превратилось в классический c X / Y сценарий. Любезное предложение @ Strawberry привело меня к filldb.info , где я разработал фиктивный локальный тестовый сценарий.

Что меня беспокоило, так это то, что я не мог получить никаких синтаксических ошибок, чтобы понять, что происходит . С некоторой помощью вышеперечисленных комментаторов я смог сделать образец манекена db.

Я знаю. Выше (был) беспорядок. Причина в полном отсутствии подшипников.

Это дает мне нужный результат. Не понимая псевдонимов и обусловливая LEFT JOIN

SELECT orders.id                           AS orderID, 
       orders.closed                       AS closed, 
       orders.deleted                      AS deleted, 
       orders.close_date                   AS closeDate, 
       items.id                            AS itemID, 
       items.item_uid                      AS itemPLU, 
       items.NAME                          AS itemName, 
       items.category                      AS Category, 
       items.price                         AS itemPrice, 
       items.qty                           AS itemQty, 
       items.qty * items.price             AS itemRevenue, 
       options.option_uid                  AS optionPLU, 
       options.price                       AS optionPrice, 
       options.value                       AS optionName, 
       options.qty                         AS optionQty, 
       options.qty * options.price         AS optionRevenue, 
       ingredients.ingredient_uid          AS ingredientPLU, 
       ingredients.NAME                    AS ingredientName, 
       ingredients.qty                     AS ingredientQty, 
       ingredients.price                   AS ingredientPrice, 
       ingredients.qty * ingredients.price AS ingredientsRevenue 
FROM   orders_item AS items 
       LEFT JOIN orders_ingredient AS ingredients 
              ON ingredients.item_id = items.id 
       LEFT JOIN orders_option AS options 
              ON options.item_id = items.id 
       LEFT JOIN orders 
              ON items.order_id = orders.id 
WHERE  orders.closed = 1 
       AND orders.deleted = 0 
       AND orders.close_date = (SELECT Max(close_date) 
                                FROM   orders); 

, я получаю строку, которая является записью каждого предмета, проданного за запрошенный день, включая опции и ингредиенты, которые клиент добавил к предмету, вместе со всеми необходимыми данными.

Спасибо всем, кто дал мне указатели, жестокие или нет.

0 голосов
/ 19 июня 2020

Для начала,

 (SELECT MAX(orders.Close_Date))

должно быть

 (SELECT MAX(Close_Date) FROM orders)

Для оптимизации

WHERE
    orders.Closed = 1
    AND orders.Deleted=0
    AND orders.Close_Date =

orders необходимо

INDEX(Closed, Deleted, Close_Date)   -- in any order

Этот паттерн обычно неэффективен; попробуйте сгладить запрос.

FROM ( SELECT ... ) JOIN ( SELECT ... ) ON ...

,SODA , - подумайте об удалении завершающих пробелов по пути. В противном случае вы можете наткнуться на 'SODA' != 'SODA '.

"Цель состоит в том, чтобы получить хороший бит данных в аккуратной форме »- Но разве CSV - это аккуратная форма? Что с ним будет делать?

...