2011-04-25 36 views
0

我有一個帶有書籤的表格,lz_link和一個表格,其中存儲着每個點擊名爲lz_hits的鏈接的表格。然後,我想按照上週收到的點擊次數來顯示所有書籤。選擇表A中的所有元素,按表B中與每個項目鏈接的條目數量排序

這是我的查詢到目前爲止:

SELECT count(hit_time) as cnt, descr, l_id, url 
FROM lz_link 
LEFT JOIN lz_hits ON hit_lz=l_id 
WHERE link_aktiv=1 
    && hit_time >= '.(time()-Options::$most_hits_hit_days*3600*24).' 
GROUP BY hit_lz 
ORDER BY cnt DESC 
LIMIT '.Options::$boxes_count.'; 

它的工作原理,但我只得到這是在給定段中訪問零次一個書籤。沒有訪問過的任何其他書籤根本不顯示。

爲什麼會發生這種情況?

即使在特定時期內未訪問過,我如何獲取所有書籤?

+0

你在php中檢查過'(time() - Options :: $ most_hits_hit_days * 3600 * 24)'的值嗎? – 2011-04-25 20:53:04

回答

1

將適用於lz_hits的任何條件從WHERE子句移動到ON子句。 對不起,我無法發佈查詢 - 我在移動設備上。

編輯:也許這可以幫助嗎?

SELECT count(hit_time) as cnt, descr, l_id, url 
FROM lz_link 
LEFT JOIN lz_hits ON hit_lz=l_id 
    AND hit_time >= '.(time()-Options::$most_hits_hit_days*3600*24).' 
WHERE link_aktiv=1 
GROUP BY hit_lz 
ORDER BY cnt DESC 
LIMIT '.Options::$boxes_count.'; 

假設link_active和hit_lz來自表lz_link。如果link_active不是,就像我用hit_time一樣將它移動到ON子句。 至於hit_lz - 從一個左連接的列組合並沒有多大意義。考慮使用另一列進行分組。

0

寫入的查詢不明確。通常,在使用GROUP BY時,在SELECT列表中包含未包含在GROUP BY子句中的非聚合字段是錯誤的。 MySQL顯然允許這樣做,但結果被認爲是不明確的。不能完全確定哪些字段在哪個表中,我不能完全確定,但是此查詢可能會給出所需的結果。我在這裏猜測l_id是在lz_linkhit_lz是在lz_hits

SELECT count(hit_lz) as cnt, descr, l_id, url 
    FROM lz_link 
     LEFT JOIN lz_hits ON hit_lz=l_id 
      AND hit_time >= '.(time()-Options::$most_hits_hit_days*3600*24).' 
    WHERE link_aktiv=1 
    GROUP BY l_id, descr, url 
    ORDER BY cnt DESC 
相關問題