簡體   English   中英

為什么這個mysql查詢不能正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM