2011-08-28 127 views
1

我正在嘗試爲使用PHP和MySQL的客戶端創建類註冊系統。我已經建立了數據庫和表格,並且該部分工作得很好,但是,客戶要求在註冊後,如果有3名或更少的學生註冊以警告該類別可能無法運行。PHP/MySQL Count()問題

我正在嘗試使用count()函數以及從註冊PHP腳本中設置的cookie中傳遞動態變量。不過,我遇到了障礙。我似乎無法得到count()函數來實際計數行。我的選擇聲明如下。任何幫助將不勝感激。

$class = $_COOKIE["class"]; 

$min_check = "SELECT class_list, COUNT(class_list) as count 
       FROM T_Student WHERE class_list = '$class' 
       GROUP BY class_list 
       HAVING count < 20"; 
$result = mysql_query($min_check); 
$count = mysql_num_rows($result); 

if ($count < 4) 
{ 
    echo "IF THERE ARE 3 OR FEWER PEOPLE SIGNED UP FOR THIS CLASS, IT MAY NOT RUN.\n"; 
    echo "THERE ARE CURRENTLY " . $count . " PEOPLE SIGNED UP.\n"; 
} 
else if ($count > 4) 
{ 
    echo "There are currently " . $count . " people signed up for this class."; 
} 
?> 
+0

您不需要同時使用MySQL的'COUNT()'過程和PHP的'mysql_num_rows()';使用一個或另一個。另外,'echo $ count'是什麼給你的? – Bojangles

+0

您應該更加小心地命名變量。你用變量和字段名稱做了三件不同的事情,你們都稱之爲數字。使用像count_classes或$ count_rows之類的更具描述性的內容來避免令人眼花繚亂。 – ty812

回答

0

我不推薦使用已知的MySQL標識符,如count。這很混亂。

$class = mysql_real_escape_string($_COOKIE["class"]); 

$min_check = "SELECT class_list, COUNT(class_list) as mycount 
      FROM T_Student WHERE class_list = '$class' 
      GROUP BY class_list 
      HAVING mycount < 20"; 

不要忘記逃離該cookie的內容!

錯誤是 count是保留字。你需要用反引號或者更好的方式來包圍它,使用不同的名字。 本身並不是一個錯誤,但它太混亂了。

接下來,您並未實際檢索數據庫中的mycount結果。我建議使用代碼是這樣的:

$result = mysql_query($min_check); 
while($row = mysql_fetch_assoc($result)) { 
    $people_count = $row['mycount']; 
    if ($people_count < 4) { echo "this" } 
    else { echo "that" } 
} 
+0

事實上不正確。 「內置函數的名稱可以作爲標識符使用,但可能需要謹慎使用,例如COUNT可以作爲列名接受。」(從MYSQL文檔的第8.3章 – ty812

+1

Count可以像這樣不加引號使用)。嘗試一下,看看。非常真實的逃脫雖然:) –

+0

@Martin,謝謝你清理。 – Johan

5

你的SQL查詢返回class_list值的列表,每個特定實例的計數,其中有註冊的不到20人相處。

$count = mysql_num_rows($result); 

......越來越的結果集,而不是別名count值,這就是爲什麼你沒有看到你所期望的輸出返回的記錄數。您需要讀取結果集以獲取值:

while ($row = mysql_fetch_assoc($result)) { 
    $count = $row['count']; 

    if($count < 4) { ... } 
} 
+0

感謝所有的輸入。我知道我需要添加一些非常容易的東西,只是一直在考慮它太長的時間才能發現。 – jbrown574

0

您希望的計數返回查詢的行中。 mysql_num_rows將計算返回的行數,這不是你想要的。改用它。

$result = mysql_query($min_check); 
$count = mysql_fetch_row($result); 
$count = $count[0]; 
0

乍一看,HAVING count < 20是不必要的。

您使用MySQL計數函數,但從不檢索它的值!?使用:

$firstRow = mysql_fetch_row($result); 
$count = $firstRow[1]; // 1 indicates the second column (0 being the first)