[英]Why isn't this mysql query working?
我有兩個表:
x_community_invites :
id community_id from to registered message seen accepted updated
和
x_communities :
id name tags registered updated
與查詢:
$query = sprintf("SELECT x_commmunities.* FROM x_commmunities, x_community_invites WHERE x_community_invites.to = '%s' AND x_community_invites.accepted = '%d'", $id, 1);
我的問題是我運行的查詢返回x_communities表中的所有字段。
示例方案:
x_communities表中有2個社區:
- ID-1和2名稱
- 第一社區和第二社區
x_community_invites表中有3個社區邀請:
- 所有不同的ID
- 2個具有與1st Community相同的社區ID,且均接受兩個字段
- 1個具有與第二個社區相同的社區ID,以=個人資料ID並被接受= 1
但是通過查詢,它會捕獲所有社區ID和名稱,出於某種原因,我不知道。
我想返回社區ID和名稱,其中x_communities_invites.to字段是用戶ID,x_communities_invites.accepted字段是1。
另外,上述查詢是哪種查詢? 某種形式的聯接,我無法在線找到具有類似語法的類似查詢。
你能幫我嗎?
我在這里做錯了什么?
您尚未鏈接表。 您應該使用JOIN:
SELECT x_commmunities.*
FROM x_commmunities
JOIN x_community_invites on x_commmunities.id=x_community_invites.community_id
WHERE x_community_invites.to = '%s' AND x_community_invites.accepted = '%d'
這是一個隱式內部聯接,但是缺少連接兩個表的條件。
SELECT x_commmunities.id, x_commmunities.name, COUNT(x_community_invites.*) AS invites
FROM x_commmunities, x_community_invites
WHERE x_commmunities.id = x_community_invites.community_id
AND x_community_invites.to = 'some_id_value'
AND x_community_invites.accepted = '1'
GROUP BY x_commmunities.id, x_commmunities.name
這可能會導致重復(同一社區的多次邀請)。 GROUP BY通過提供的字段匯總記錄。
當使用FROM x_commmunities, x_community_invites
您正在執行交叉FROM x_commmunities, x_community_invites
該交叉FROM x_commmunities, x_community_invites
每一行與x_communities
的每一行組合在一起,而x_community_invites
不進行任何匹配。
您已經添加了一些單獨的聯接約束,以告訴DBMS如何查找匹配對:
WHERE x_communities.id = x_community_invites.community_id
這樣,您將獲得內部連接。
您也可以在從句中使用join語法:
FROM x_communities join x_community_invites on(x_communities.id = x_community_invites.community_id)
或者如果您想要外部聯接:
FROM x_communities left join x_community_invites on(x_communities.id = x_community_invites.community_id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.