[英]What is wrong with mySQL Syntax?
我正在使用以下代碼進行計數,並對數據庫中的值求和。
$query = "SELECT
COUNT(n.*) AS cnt_news,
COUNT(a.*) AS cnt_adv,
COUNT(c.*) AS cnt_comm,
SUM(CASE WHEN c.approve = '1' AND c.spam = '0' THEN 1 ELSE 0 END) AS cnt_approved,
SUM(CASE WHEN c.approve = '0' AND c.spam = '0' THEN 1 ELSE 0 END) AS cnt_unapproved,
SUM(CASE WHEN c.spam = '0' THEN 1 ELSE 0 END) AS cnt_spam,
SUM(a.amount) AS t_amnt,
SUM(a.cashpaid) AS t_cpaid,
SUM(a.balance) AS t_bal
FROM
news n, advertisements a, comments c";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
以下代碼給我一個錯誤,錯誤是
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS cnt_news, COUNT(a.*) AS cnt_adv, COUNT(c.*) AS cnt_c' at line 2
如果我刪除選擇查詢的前三行,它不會顯示錯誤,而是會打印錯誤的值。
我的代碼有問題。 ??
下面的代碼對我來說很好用。
$query = "SELECT COUNT(*) as cnt_news FROM news";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$query = "SELECT COUNT(*) as cnt_adv FROM advertisements";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$query = "SELECT COUNT(*) as cnt_comm FROM comments";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$query = "SELECT SUM(CASE WHEN c.approve = '1' AND c.spam = '0' THEN 1 ELSE 0 END) AS cnt_approved,
SUM(CASE WHEN c.approve = '0' AND c.spam = '0' THEN 1 ELSE 0 END) AS cnt_unapproved,
SUM(CASE WHEN c.spam = '1' THEN 1 ELSE 0 END) AS cnt_spam
FROM COMMENTS c";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$query = "SELECT SUM(a.amount) as t_amnt,
SUM(a.cashpaid) as t_cpaid,
SUM(a.balance) as t_bal
FROM advertisements a";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
我要去哪里錯了?
好吧,我放棄了將查詢合並為一個查詢的想法,並且正如Col.Shrapnel的建議那樣,我為此做了一個自定義功能,並且發現以這種方式維護代碼非常容易。 謝謝。Sharpl Col我正在發布他建議的答案。
這是我創建的用戶定義函數。
function dbgetvar($query) {
$res = mysql_query($query);
if( !$res) {
trigger_error("dbget: ". mysql_error(). " in " .$query);
return false;
}
$row = mysql_fetch_array($res);
if(!$row) return "";
return $row;
}
然后我使用此代碼調用了我的函數。
$news = dbgetvar("SELECT COUNT(*) as count FROM news");
$comments = dbgetvar("SELECT SUM(CASE WHEN c.approve = '1' AND c.spam = '0' THEN 1 ELSE 0 END) AS approved,
SUM(CASE WHEN c.approve = '0' AND c.spam = '0' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN c.spam = '1' THEN 1 ELSE 0 END) AS spam,
COUNT(*) AS count
FROM COMMENTS c");
$advertise = dbgetvar("SELECT SUM(a.amount) AS amount,
SUM(a.cashpaid) AS cashpaid,
SUM(a.balance) AS balance,
COUNT(*) AS count
FROM advertisements a");
上面的代碼對我來說很好用。
看來Mysql不喜歡那條線。 將COUNT(n.*)
更改為COUNT(n.id)
或該表的主鍵字段的名稱。 對a
和c
執行相同的操作。
您不能使用count(tablename.*)
,請嘗試使用count(tablename.columnname)
你可以試試
選擇( 從新聞中選擇COUNT( )條新聞)作為cnt_news,從(廣告中選擇COUNT( )條新聞 )作為cnt_adv,...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.