2017-07-30 102 views
0

我有一個有幾列的數據庫,我試圖用它填充一個html表。 一切都很好,但我遇到了以下問題:在一個查詢中選擇*,計數(*)

由於我填充篩選結果到不同的列,我想出了一個SQL查詢需要同時選擇*和計數(*)?

$query = "SELECT *, COUNT(example_A) AS total_example_A FROM test WHERE example_A = 'certain_result' AND date(start_date) = '$current_date_proof' ORDER BY start_date ASC"; 

它確實有效,但我只得到第一個結果。我想我不能將Select和Count結合起來?

+0

試着理解select *的作用和count(*)的作用。計數(*)給出了一組組的結果並且是標量。因此只返回單行 – Gunnrryy

+0

'COUNT'是一個聚合函數,因此需要使用'GROUP BY'。 – fubar

+0

@Gunnrryy準確地說,'Count'或任何聚合函數('Avg','Sum',...)每個組返回一行。 –

回答

0

您可以用相關子查詢做到這一點,伯爵是一個聚合函數(所以它聚合或將所有數據):

$query = " 
    SELECT 
     t1.*, 
     (SELECT COUNT(t0.id) FROM test AS t0 WHERE t0.id = t1.id) AS total_example_A 
    FROM 
     test AS t1 
    WHERE 
      t1.example_A = 'certain_result' 
     AND 
      date(t1.start_date) = '$current_date_proof' 
    ORDER BY t1.start_date ASC 
"; 

這是假設你的表test有一個名爲id主鍵。另一件事是我要依靠主鍵,如果它不是(example_A)COUNT(t0.id)

在我的世界數據庫要麼有一個Auto Increment Int作爲主鍵或他們有由2個或更多的外鍵的複合主鍵,其本身是Auto Increment Int字段。國際海事組織(IMO)必須始終在您的桌子上放置代用鑰匙。這是一個與數據本身沒有直接關係的關鍵。但是,這只是我...

你可以計算你的應用程序內的回報,但是禁止相關的子查詢應該給你最好的/ goodest的表現。當然要好一個單獨的數據庫調用。

+0

謝謝,我會試試這個。是的,我有一個ID與自動增量 - 沒有想到使用! – Kris

+0

它確實有效 - 但計數結果似乎是錯誤的(= 1),在我的示例中它應該是2。 – Kris

+0

如果沒有您擁有的數據,我沒有辦法告訴您,您是否嘗試過在沒有子查詢的情況下運行查詢,以查看它的內容。 – ArtisticPhoenix