如果表中的某个字段大于1,是否可以输出多个表行。
我举个例子:
我在建一个拍卖网站,在那里我们卖抽奖的票。
票子存放在一张桌子里,就像这样:
id, order_id, product_id, qty, price
到了打印机票的时候,我想把所有的都转储到CSV中。
到目前为止,我正在做这个查询(简化,省略INNER JOIN):

SELECT id, order_id, product_id, qty, price FROM order_details

然后在上面运行如下循环:
foreach($rows as $row) {
   for($i = 0; $i < $row['qty']; $i++) {
      $tickets[] = $row;
   }
}

这样我就可以得到每个数量的单独条目(这样人们就可以得到正确的条目数量…)。
是否有任何方法可以在SQL本身中实现这一点,以便将每一行乘以x,其中x是表中的某个字段(在本例中是qty)?

最佳答案

您可以在MySQL中使用blackhole表和trigger
设置表格
首先创建要插入到其中的黑洞表,然后创建黑洞将重新路由到的内存(或临时表)。

CREATE TABLE Blackhole1 LIKE order_details ENGINE = BLACKHOLE;

CREATE TABLE temp_order_results LIKE order_details ENGINE = MEMORY;

设置触发器
现在,在blackhole表上创建一个触发器,它将把insert重新路由到内存表,并用qty > 1复制行。
DELIMITER $$

CREATE TRIGGER ai_Blackhole1_each AFTER INSERT ON blackhole1 FOR EACH ROW
BEGIN
  DECLARE ACount INTEGER;
  SET ACount = new.qty;
  WHILE ACount > 1 DO BEGIN
    INSERT INTO temp_order_results
    VALUES (new.id, new.order_id, new.product_id, 1, new.price)
    SET ACount = ACount - 1;
  END; END WHILE;
END $$

DELIMITER ;

执行查询的语句
现在插入。。选择进入黑洞
INSERT INTO blackhole1
  SELECT id, order_id, product_id, qty, price FROM order_details;

以及“按温度顺序选择”结果。
SELECT id, order_id, product_id, qty, price FROM order_details;

关于mysql - 如果QTY> 1,MySQL输出多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5925415/

10-13 03:19