0

我的 SELECT sql 语句有问题,我还没有弄清楚。当我使用函数打印出结果时mysql_fetch_assoc(),我得到重复的行/记录。一条记录重复 13 次。我不知道为什么,据我所知,我做得对。

以下是我的sql查询:

SELECT 
    members.member_id, 
    members.firstname, 
    members.lastname, 
    billing_details.Street_Address, 
    billing_details.Mobile_No, 
    orders_details.*, 
    food_details.*, 
    categories.*, 
    cart_details.*, 
    quantities.* 
FROM 
    members, billing_details, orders_details, categories, 
    quantities, food_details, cart_details 
WHERE 
    members.member_id=orders_details.member_id AND 
    billing_details.billing_id=orders_details.billing_id AND 
    orders_details.cart_id=cart_details.cart_id AND 
    cart_details.food_id=food_details.food_id AND 
    cart_details.quantity_id=quantities.quantity_id
4

4 回答 4

3

您的 WHERE 子句中没有“类别”。我猜你有13个类别?如果您需要更好的解释,请告诉我。

于 2013-05-04T11:11:29.907 回答
1

使用SELECT DISTINCT.

请注意

使用mysql_*库是不好的做法。它们已弃用,应由mysqli_*库或PDO对象替换。

于 2013-05-04T11:07:08.837 回答
1

你为什么不像下面这样左连接

SELECT members.member_id, members.firstname, members.lastname, billing_details.Street_Address, billing_details.Mobile_No, orders_details.*, food_details.*, categories.*, cart_details.*, quantities.* FROM members as m

Left join billing_details as b ON b.billing_id=m.?
LEFT JOIN orders_details as o ON o.cart_id=m.?
LEFT JOIN food_details as f ON f.f_id =m.? 
LEFT JOIN cart_details as c ON c.?=?
LEFT JOIN quantitiesas q  ON q.?=?
LEFT JOIN categories as cat ON cat.?=?
于 2013-05-04T11:14:43.533 回答
0

如果您只希望每个 member_id 出现一次,您可以使用DISTINCT

SELECT DISTINCT members.member_id, ...

您还可以使用JOIN USING避免重复(DRY):

http://dev.mysql.com/doc/refman/5.7/en/join.html(搜索USING(column_list)

这样,您也会注意到 msising 谓词,因为它就在连接的表名旁边。

于 2013-05-04T11:07:07.203 回答