簡體   English   中英

MySQL語法有什么問題?

[英]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)或該表的主鍵字段的名稱。 ac執行相同的操作。

您不能使用count(tablename.*) ,請嘗試使用count(tablename.columnname)

你可以試試

選擇( 從新聞中選擇COUNT( )條新聞)作為cnt_news,從(廣告中選擇COUNT( )條新聞 )作為cnt_adv,...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM