我试图创建一个语句,该语句将返回按(event_target)分组并按该计数排序的username, event_title, and event_target计数。
换句话说,totalsum是(username, event_title, and event_target都是相同值的行的计数。
问题是结果没有按totalsum在DESC中排序。

$stmt = $db->prepare("SELECT *, COUNT(`event_target`) 'totalsum' FROM `testdb` WHERE `account_id` = ? GROUP BY `username`, `event_title`, `event_target` ORDER BY 'totalsum' DESC");

$stmt->执行(数组($_SESSION['user']['account_id']);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

//print out the array echo '<pre>',print_r($results,true),'</pre>';

其次,我还想在WHERE子句中使用totalsum值。。。所以假设我只想返回totalsum=6的值。这将返回一个空数组。如果我在没有WHERE子句的情况下使用上述语句,则会得到totalsum=6的结果。
$stmt = $db->prepare("SELECT *, COUNT(`event_target`) 'totalsum' FROM `testdb` WHERE `account_id` = ? AND 'totalsum' = 6 GROUP BY `username`, `event_title`, `event_target` ORDER BY 'totalsum' DESC");

$stmt->执行(数组($_SESSION['user']['account_id']);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

//print out the array echo '<pre>',print_r($results,true),'</pre>';

我在这里做错什么了?
编辑:
谢谢你对此的澄清!目前看来这对我最有效。
SELECT *, COUNT(`event_target`) `totalsum` FROM `testdb` WHERE `account_id` = ?
  GROUP BY `username`, `event_title`, `event_target` HAVING `totalsum`=6

我遇到了另一个问题。我之所以询问totalsum的条件,是因为这是对搜索函数的修改。所以。。。典型的搜索查询可能是这样的:
SELECT *, COUNT(`event_target`) `totalsum` FROM `testdb` WHERE `account_id` = ?
  AND (`event_target` LIKE 'searchquery' OR `event_title` LIKE 'searchquery' OR `event_name` LIKE 'searchquery')
  GROUP BY `username`, `event_title`, `event_target` ORDER BY `totalsum` DESC

如何为totalsum添加or条件?这可能是一个糟糕的例子,但是如果有人搜索“6”,那么任何值为6的totalsum结果也应该返回。在一个完美的世界里,我希望能够做到:
OR `totalsum` LIKE 'searchquery'

最佳答案

您为totalsum使用了错误的引号:

SELECT *, COUNT(`event_target`) 'totalsum' FROM `testdb` WHERE `account_id` = ? GROUP BY `username`, `event_title`, `event_target` ORDER BY 'totalsum' DESC

应该是:
SELECT *, COUNT(`event_target`) `totalsum` FROM `testdb` WHERE `account_id` = ? GROUP BY `username`, `event_title`, `event_target` ORDER BY `totalsum` DESC

不过,如果你愿意的话,你可以把它们放在这里。
要按totalsum筛选结果,可以执行以下操作:
SELECT *, COUNT(`event_target`) `totalsum` FROM `testdb` WHERE `account_id` = ?
  GROUP BY `username`, `event_title`, `event_target` HAVING `totalsum`=6

09-27 23:23