MySQL INNER JOIN在同一个表上

时间:2017-03-04 20:26:47

标签: mysql

我有一个系统,所有用户都存储在同一个表中,他们的“角色”决定了他们是什么类型的用户。

客户在商店赚取积分。我正在尝试创建一个PHP页面,客户可以在其中查看他们已经获得积分的商店,因此商店可以登录并查看哪些客户已获得积分。 (希望有意义!)

我有两张桌子

Table1是用户表,包含其中的所有用户信息..即姓名,地址等

Table2存储所有点和uid(客户ID)和SID(商店ID),这两个字段都匹配用户表中的uid。

...的sooo

我认为MySQL需要看起来像这样

Select loyal_tokens.tokens, loyal_tokens.date, users.id, users.email, users.first_name, users.last_name,loyal_tokens.sid,loyal_tokens.uid from users, loyal_tokens
INNER JOIN loyal_tokens, users as StoresName on users.id = loyal_tokens.sid 
INNER JOIN loyal_tokens, users as UsersName on users.id = loyal_tokens.uid 

这不起作用(显然有非唯一表)。我真的对如何解决它感到茫然!

在SQL结束时,我将放置一个where子句

WHERE users.id=x

用户ID可以是商店或客户,它将显示他们获得的积分并显示商店/客户名称而不是ID。

希望有意义!

由于

迈克尔

2 个答案:

答案 0 :(得分:0)

您可以使用left join,例如:

SELECT lt.*, u1.*, u2.*
FROM loyal_tokens lt LEFT JOIN users u1 ON lt.uid = u1.id
LEFT JOIN users u2 ON lt.sid = u2.id
WHERE lt.sid = ? OR lt.uid = ?

根据u1.*u2.*返回的值,您可以检查它是商店还是客户,并相应地显示这些值。

答案 1 :(得分:0)

使用这样的语法查询特定商店的客户

Select 
     loyal_tokens.tokens, loyal_tokens.date, 
     customer.last_name, customer.first_name
from loyal_tokens
    left join users as customer on customer.id = loyal_tokens.uid 
where loyal_tokens.sid  = 1234

您需要一个不同的等效查询来获取客户的商店。您无法对这两个功能使用相同的查询。