Я использую следующий код для подсчета и суммирования значений из базы данных.
$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, я сделал для нее настраиваемую функцию, и мне было очень легко поддерживать код таким образом. спасибо, полковник Шарпнель, я отправляю предложенный им ответ.
это созданная пользователем функция i.
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");
приведенный выше код работает отлично для меня.
Вы можете попробовать
SELECT (SELECT COUNT() FROM news) AS cnt_news, (SELECT COUNT() FROM рекламы) как cnt_adv, ...
Похоже, Mysql не любит эту строку. Измените COUNT(n.*)
на COUNT(n.id)
или на любое другое имя поля первичного ключа этой таблицы. Сделайте то же самое для a
и c
.
Вы не можете использовать count(tablename.*)
, попробуйте использовать count(tablename.columnname)