2016-04-29 83 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

謝謝你的回答,先生。我相信這是正確的。我很抱歉浪費你的時間,但草莓是正確的。我沒有得到重複的值。我的數據庫中有兩個條目。它只是正確地返回數據。 –