2011-03-25 19 views
1

试图找出是否可以减少我的mysql查询,以减少连接到数据库的连接数量。是他们拉走所有的行,然后只是计算某一行匹配某个字符串,如:与所有列mysql查询加上一个特定列

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

如果你正在做一个'SELECT *',那么你可以在循环遍历结果时自己执行计数。 – jswolf19 2011-03-25 02:19:26

回答

2

你在正确的轨道上。如果要扩展您的示例中的计数语句转换成一个完整的子查询,你会得到:

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

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

让计数标记到每一行似乎有点过分,但是......也许这是一个地方,两个查询只是一个更好的选择 - 你可以尝试在其他地方用连接或其他MySQL不是一个讨厌的问题 - 计数是占主导地位的臀部疼痛。

希望这会有所帮助!

PS:如果这是PHP,你应该能够执行任何数量的查询在单一连接 - 只需拨打mysql_query(...)一堆次调用mysql_close(...)之前。

+0

好吧,我几乎加入了其他地方,只是看到如果这是可能的,由于一些不幸的原因ipage是可怕的,并限制了一次从一个用户的MySQL查询连接的数量,所以我试图尽可能多地消除,试图拖延下去,直到我的合同到达其他地方。 – Bobby 2011-03-25 02:43:25

+0

@Bobby - 嘿。那么,也许jswolf19对你有最好的答案;如果你无论如何都得到这些行,你可以自己数一数。另外 - 多刺激!祝你好运... – 2011-03-25 02:49:40

相关问题