2017-06-24 33 views
0

我有一個查詢的麻煩。的MySQLi查詢2代表一個表超過30天

我需要從trade_directory他們有狀態1和第3類收集2家企業。

我要選擇2家企業在至少查看在過去30天內company_views數第一的基礎。

SELECT 
    b.id, b.v_date, b.c_id COUNT(b.c_id) AS v_count 
    AND b.v_date >= DATE_ADD(NOW(), INTERVAL - 30 DAY) 
FROM 
    company_views b 
    LEFT JOIN trade_directory v ON v.id = b.c_id 
WHERE 
    v.cat1 = 'cat' 
    AND v.cat2 = 'rat' 
    AND v.cat3 = 'hat'       
    AND v.status = '1' 
GROUP BY 
    b.c_id 
ORDER BY 
    v_count ASC 
LIMIT 2 

感謝

克里斯

回答

1

您使用AND運營商SELECT而不是WHERE

AND b.v_date >= DATE_ADD(NOW(), INTERVAL - 30 DAY) 

你可以試試這個代碼

SELECT 
    b.id, b.v_date, b.c_id COUNT(b.c_id) AS v_count 
FROM 
    company_views b 
    LEFT JOIN trade_directory v ON v.id = b.c_id 
WHERE 
    v.cat1 = 'cat' 
    AND v.cat2 = 'rat' 
    AND v.cat3 = 'hat'       
    AND v.status = '1' 
    AND b.v_date >= DATE_ADD(NOW(), INTERVAL - 30 DAY) 
GROUP BY 
    b.c_id 
ORDER BY 
    v_count ASC 
LIMIT 2 
+0

感謝您的答覆。我想這和它的行爲不爲我所需要的,我發現這句話:「你有一個LEFT JOIN但後來WHERE條件迫使它是一個普通的加盟。」所以AND部分需要保持在顯然的位置! 我改變我的做法(使用不同的表,但在這裏是什麼工作,但它真的很慢) –

0

我改變我的做法(使用不同的表,但在這裏是什麼工作,但它是真的很慢

SELECT o.*, COUNT(e.c_id) AS b_count 
        FROM cat3_entries o 
        LEFT JOIN company_views e ON e.c_id = o.c_id 
         AND e.v_date >= DATE_ADD(NOW(), INTERVAL - 30 DAY) 
        WHERE 
         o.c3_id = '81'       
        GROUP BY 
         o.c_id 
        ORDER BY 
         b_count ASC 
        LIMIT 
         3; 

如果我能解決速度問題這一塊將是巨大的。

+0

您選擇所有列從'cat3_entries O',而不是'O操作。*'只包括您所需要的列 – Rtra