如果表中的某个字段大于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/