所有列的mysql查询加上一个特定列的计数

时间:2011-03-25 02:01:24

标签: mysql select count

试图弄清楚我是否可以减少我的mysql查询以减少与数据库的连接数量。是他们离开所有行,然后只计算某一行匹配某个字符串,如:

mysql_query(
    "SELECT *, (COUNT(unread = 1) AS msgsunread) 
          FROM message_received WHERE user_id = '$uid'");

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。如果将示例中的count语句扩展为完整子查询,则会得到:

SELECT *,
    (SELECT COUNT(*) FROM message_received WHERE unread = 1 AND user_id = $uid) AS unread_count,
FROM message_recieved WHERE user_id = $uid;

你要找的未读数(每一行都有!)。 MySQL应该足够聪明,可以缓存该计数查询的结果,因此您可以通过一个连接有效地执行两个查询。

将计数标记到每一行似乎有点过分,但是......也许这是一个两个查询只是更好的选择的地方 - 你可以尝试使用连接在其他地方进行优化,或者MySQL的其他东西不那么令人讨厌 - 计数是占主导地位的臀部的痛苦。

希望这有帮助!

PS:如果这是PHP,您应该可以通过单个连接执行任意数量的查询 - 只需调用{{ 1}}在调用mysql_query(...)之前多次。