Mysql 升级sql查询联接
我有一个疑问:Mysql 升级sql查询联接,mysql,sql,Mysql,Sql,我有一个疑问: SELECT e.id AS event_id, e.title, e.date, e.category, e.place, p.id, p.name, p.coor, p.nz, a.user, a.event, COUNT(a.user) AS attending FROM events AS e LEFT JOIN attendance a ON a.event = e.id LEFT JOIN plac
SELECT e.id AS event_id, e.title, e.date, e.category, e.place,
p.id, p.name, p.coor, p.nz,
a.user, a.event, COUNT(a.user) AS attending
FROM events AS e
LEFT JOIN attendance a
ON a.event = e.id
LEFT JOIN places p
ON p.id = e.place
GROUP BY e.id, e.title
ORDER BY attending DESC
此查询从事件表中获取事件,并连接其他一些表。。。如果你能帮我提高效率,我会感谢你的
我还有一张桌子叫:邀请的朋友:
event_id bigint(20)
user_id int(11)
owner tinyint(1)
它存储邀请参加认证活动的用户ID。。如果用户是事件的创建者,则所有者是存储的bool
我只想根据“已邀请的朋友”表中的数据选择当前用户是否被邀请。我对MySql不太熟悉,但下面是:
SELECT e.id AS event_id, e.title, e.date, e.category, e.place,
p.id, p.name, p.coor, p.nz,
a.user, a.event, COUNT(a.user) AS
FROM
events AS e
LEFT JOIN attendance a ON a.event = e.id
LEFT JOIN places p ON p.id = e.place
WHERE
e.Category <> 4
OR EXISTS (SELECT
NULL
FROM
invited_friends
WHERE
invited_friends.event_id = e.id
AND invited_friends.user_id = @username -- User to search for
)
GROUP BY
e.id,
e.title
ORDER BY
attending DESC
内部加入,它工作,但不是所有我的活动都邀请了用户,其中一些是公开给每个人。。。所以它会忽略它们:codeINNER加入i.event\u id=e.id和i.user\u id=1439375286 code你怎么知道哪些活动是公开的?它存储在哪里?如果e.category=4,那么它是一个私人事件,当我使用像我展示的那样的内部连接时,它只会忽略邀请朋友的事件之外的所有事件。我修改了下面的答案,以适应该类别。如果类别不等于4,那么我假设它是公共的,应该包括在内,否则请确保@username已被邀请