Функция для возврата значения, которое следует использовать в триггере - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно создать функцию для возврата водителю с наименьшим количеством доставок. У меня есть таблица orders, где драйвер вставлен в соответствующий столбец (значение может быть NULL), а также таблица ресторанов, для которых назначен драйвер. Структура таблицы драйверов и порядок столов приведены ниже.

Я пытался сделать:

SELECT driver, restaurant, count(driver)
FROM orders 
GROUP BY restaurant, driver AS t;

Теперь я должен выбрать драйвер из таблицы драйверов с условиями driver.driver= t.driver and driver.restaurant=t.restaurant и как выбрать драйвер, для которого count(driver) является минимальным.

CREATE TABLE IF NOT EXISTS `driver` (
  `Car_Number` varchar(10) NOT NULL,
  `Driver_Name` varchar(50) NOT NULL,
  `Model` varchar(50) NOT NULL,
  `Restaurant_Name` varchar(50) NOT NULL,
  PRIMARY KEY (`Car_Number`),
  KEY `FK_driver_car` (`Model`),
  KEY `FK_driver_restaurant` (`Restaurant_Name`),
  CONSTRAINT `FK_driver_car` FOREIGN KEY (`Model`) REFERENCES `car` (`Model`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_driver_restaurant` FOREIGN KEY (`Restaurant_Name`) REFERENCES `restaurant` (`Restaurant_Name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `orders` (
  `Order_ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `Customer_Name` varchar(50) NOT NULL,
  `Restaurant_Name` varchar(50) NOT NULL,
  `Is_Delivery` varchar(3) NOT NULL,
  `Car_Number` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`Order_ID`),
  KEY `FK_order_customer` (`Customer_Name`),
  KEY `FK_order_restaurant` (`Restaurant_Name`),
  KEY `FK_order_driver` (`Car_Number`),
  CONSTRAINT `FK_order_customer` FOREIGN KEY (`Customer_Name`) REFERENCES `customer` (`Customer_Name`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_order_driver` FOREIGN KEY (`Car_Number`) REFERENCES `driver` (`Car_Number`) ON DELETE SET NULL ON UPDATE SET NULL,
  CONSTRAINT `FK_order_restaurant` FOREIGN KEY (`Restaurant_Name`) REFERENCES `restaurant` (`Restaurant_Name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=latin1;

Если у меня в заказе один водитель с, скажем, 2 доставкой и один с 4 (для того же ресторана), я ожидаю, что функция вернет car_number(driver id) для водителя, у которого 2.

CREATE  DEFINER=root@localhost TRIGGER select_driver
      AFTER  INSERT   ON orders
    FOR EACH ROW BEGIN
        set @orderid = ( SELECT  max(order_id) from  orders );
        SET @restauranatname= ( SELECT  Restaurant_Name from  orders
                                           WHERE  order_id=@orderid );
        set @drivername = ( SELECT  find_lazy_driver('@restauranatname') );
        SET @car_number = ( SELECT  car_number FROM  driver
                                           WHERE  driver_name=@drivername );
        update  orders SET car_number= @car_number
            WHERE  Order_ID = @orderid;
        END
...