我坚持使用SELECT sql查询

时间:2013-05-04 11:04:05

标签: php mysql

我的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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用SELECT DISTINCT

请注意

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

答案 2 :(得分: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.?=?

答案 3 :(得分:0)

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

SELECT DISTINCT members.member_id, ...

您也可以使用JOIN USING来避免重复(干):

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

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