2014-02-12 132 views
-1

我有一個基於PHP/MYSQL的應用程序,其中有一個搜索區域,當您按日期搜索時,則顯示在這些日期之間可用的房產/酒店。此外,我還有一些其他過濾器,如區域,酒店擁有的設施等。在PHP/MYSQL中計算篩選記錄

現在一切正常,但現在想要顯示每個過濾器的記錄數。

我試圖通過爲每個基於動態搜索用戶的過濾器添加多個查詢,但這使得我的頁面性能變慢。因爲如果我有5個過濾器,那麼我將運行5個查詢。

我已經看到了在Magento這樣的事情,它計算的是過濾器已如下圖所示的畫面效果的數量:

enter image description here

什麼將是這樣做的最好的方法,我只是需要一些可以遵循的邏輯和程序來解決這個問題。

發佈整個表的結構是困難的,但我並主張爲它的短,所以你們可能有一些想法,並提出了一些解決方案:

表是:

Properties - id, name 
Factsheet_label - label_id, Name 
Factsheet - id, label_id, prop_id, value (Yes, No) 

我顯示全部來自factsheet_label表格的過濾器,然後我需要計算我有的屬性的結果。

+0

使用mysql_num_rows並特別CATEGORY_ID讓這一切都取決於你如何得到您的查詢設置計數 –

+0

。如果您使用的是GROUP BY,那麼您可以使用COUNT()來獲取該組的條目數。 – jeff

+0

@RizwanSultan不,我已經表明,作爲一個例子,所以如果您點擊價格範圍0-999,那麼它會顯示紅色(2),這意味着我們需要動態計算每個過濾器的記錄數。對於這一個選項,我認爲每個過濾器都在運行查詢,但這會讓我的頁面變慢。 – Prashant

回答

0

每個「SELECT *」都可以是「SELECT *,COUNT(*)....」,那麼您可以看到結果的nr。 爲了幫助您更多我需要查看代碼。

1

這樣

SELECT categoryId,CategoryName,COUNT(*) FROM Products GROUP BY CategoryId,CategoryName

意志集團的聲明結果按類別,並返回各自的計數,像這樣

CategoryId CategoryName Count 
1   Living Room 4 
2   Bedroom  2 

編輯

這應該這樣做,如果我已經正確理解你的表。

SELECT F.id,F.label_id,F.prop_id,F.value,L.Name, 
(SELECT COUNT(*) FROM Properties WHERE id = F.prop_id) 
FROM FactSheet F 
LEFT JOIN FactSheet_label L on L.label_id = F.Label_id 

所有數據都從資料單中提取。相關標籤將從factsheet_label中提取。然後通過子查詢爲每一行檢索計數

以下是另一種方法,它可能會或可能不會更有效一些。

SELECT F.id,F.label_id,F.prop_id,F.value,L.Name,P.count 
FROM FactSheet F 
LEFT JOIN FactSheet_label L on L.label_id = F.Label_id 
LEFT JOIN (SELECT id,COUNT(*) count FROM Properties GROUP BY id) P ON P.id = F.prop_id 
+0

這意味着計數記錄,我需要運行一個單獨的查詢,對不對? – Prashant

+0

應該可以在一個單獨的存儲過程中完成,但沒有關於數據庫模式的更多信息我無法真正幫助。桌子如何擺放? – roryok

+0

我已經添加了一些有關表格的詳細信息,請檢查。 – Prashant

0

希望這是有益

SELECT (
     SELECT COUNT(*) 
     FROM tab1 
     ) AS count1, 
     (
     SELECT COUNT(*) 
     FROM tab2 
     ) AS count2 
FROM dual