2011-03-25 63 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

相關問題