2016-04-29 85 views
0

出于某种原因,我只能看到一个重复行,但我无法真正查明查询中哪里出错了。我的MySQL SELECT查询正在返回同一行的倍数

$stmt = $mysqli->query(" 
    SELECT DISTINCT vendors_tbl.email AS email, 
    (vendor_avails_tbl.standard_pricing - vendor_loc_tbl.offpeak_time_pricing) AS best_margins, 
    vendor_loc_tbl.location_id AS locationID, 
    vendor_loc_tbl.loc_img_path AS locImg, 
    vendor_loc_tbl.offpeak_time_pricing AS offpeak, 
    vendor_loc_tbl.address1 AS address1, 
    vendor_loc_tbl.address2 AS address2, 
    vendor_loc_tbl.zip_code AS zip, 
    vendor_loc_tbl.geocodes AS geo, 
    vendor_loc_tbl.has_valet AS valet, 
    vendor_loc_tbl.has_transport AS transport, 
    vendor_loc_tbl.has_wheelchair AS wheelchair, 
    vendor_loc_tbl.has_desk AS desk, 
    vendor_loc_tbl.has_24hours AS open24hrs, 
    vendor_loc_tbl.has_covered AS covered, 
    vendor_loc_tbl.has_security AS security, 
    (vendor_avails_tbl.available_economy + vendor_avails_tbl.available_standard + vendor_avails_tbl.available_midsize + vendor_avails_tbl.available_truck_suv) AS avail_total, 
    vendor_avails_tbl.standard_pricing AS standard_pricing, 69 * 
    DEGREES(ACOS(COS(RADIANS($e_lat)) 
     * COS(RADIANS(SUBSTR(vendor_loc_tbl.geocodes, 1, 10))) 
     * COS(RADIANS($e_lon) - RADIANS(SUBSTR(vendor_loc_tbl.geocodes, 13))) 
     + SIN(RADIANS($e_lat)) 
     * SIN(RADIANS(SUBSTR(vendor_loc_tbl.geocodes, 1, 10))))) AS distance_in_m 
    FROM vendors_tbl 
    INNER JOIN vendor_loc_tbl ON vendor_loc_tbl.vendor_id = vendors_tbl.vendor_id 
    INNER JOIN vendor_avails_tbl ON vendor_avails_tbl.location_id = vendor_loc_tbl.location_id 
    WHERE vendor_avails_tbl.available_standard > 0 
    ORDER BY vendor_loc_tbl.override_level DESC, best_margins DESC, distance_in_m ASC 
    LIMIT 5 
"); 
+2

哎呀,我的眼睛,我再也看不到了......!请格式化您的问题,以便我们可以阅读它! – Random

+2

请格式化您的代码。根据我所看到的,您的连接条件可能会给出vendor_tbl – Preuk

+0

的多个vendor_loc_tbl或vendor_avails_tbl,请问您可以添加表格模式和FK定义,以便我们可以修复您的连接? – Preuk

回答

0

由于您未按条件指定组,因此您的distinct将创建您指定的所有字段的组。 所以没有机会获得重复价值。

+0

你是对的。我认为这是正确的答案,因为你有最好的解释并单独回答。 –

1

那么在某些情况下,它是投注者使用GROUP BY声明比DISTINCT。在你的例子中,你应该至少在一个col上添加一个组(一些唯一的例如id)。当您在查询中使用聚合时,最好使用group by,仅使用连接时 - distinct就足够了。

+0

谢谢你的回答,先生。我相信这是正确的。我很抱歉浪费你的时间,但草莓是正确的。我没有得到重复的值。我的数据库中有两个条目。它只是正确地返回数据。 –