我对SQL很陌生,所以请不要对我太过刻意:(
我有两张桌子 - " cart"和"命令"。在"购物车" table是随机用户订购的所有内容 - 在这种情况下是这几行(上面的列名称):
session_id - product_id - product - product_name - price - quantity
1 - 1 - Table - Something - 10.00 - 1
1 - 2 - Chair - SomethingNew - 20.00 - 1
2 - 2 - Chair - SomethingNew - 20.00 - 1
我想写一个语句,选择具有相同session_id的所有订单 - 在本例中为数字1 - 并将其复制到" orders" table,因为具有相同会话ID的所有项目都应标记为一个大订单 - 但我不想对其进行硬编码(例如,select和session_id = 1)... 这是我到目前为止所做的选择:
我尝试使用内部/自联接,以便我可以检查值是否相同
SELECT * from cart JOIN cart AS cartB
WHERE cart.session_id = cartB.session_id
GROUP BY cart.session_id;
但是这会给我以下行作为解决方案:
session_id - product_id - product - product_name - price - quantity
1 - 1 - Table - Something - 10.00 - 1
2 - 2 - Chair - SomethingNew - 20.00 - 1
而不是(我想要的):
session_id - product_id - product - product_name - price - quantity
1 - 1 - Table - Something - 10.00 - 1
1 - 2 - Chair - SomethingNew - 20.00 - 1
编辑:我知道,第2行和第3行非常相似。但这就是为什么会话ID在这种情况下非常重要,以及我为什么要使它工作。
我做错了什么?是否需要内连接?我真的有一些问题,因为我在这里是一个巨大的初学者..但我的代码对我有意义.. :( 非常感谢每个花时间阅读(甚至可能有帮助)的人!
答案 0 :(得分:0)
目前我在这里看到2个选项:
您的PROGRAM要么将要复制到订单表的订单的会话ID传递给SQL,这在任何网上商店都是正常的。
在这种情况下,您必须从您的计划和pass it to your SQL query as a parameter, eg. in PHP获取正确的session_id=
。
或者您想要将所有session_id&t购物车内容复制到订单中。在这种情况下,它更简单,没有任何WHERE:INSERT INTO order SELECT * FROM cart;
如果您需要其他内容,则应指定如何确定需要将哪个session_id从购物车复制到订单。
UPD。你是对的,你的例子中的JOIN似乎没有做任何有用的事情。