gpt4 book ai didi

mysql - 如何使用 JOIN 而不是逗号?

转载 作者:可可西里 更新时间:2023-11-01 07:55:58 28 4
gpt4 key购买 nike

我有这个问题:

INSERT INTO Votes (id_post,id_user)
SELECT ?,?
FROM Posts p, Users u
WHERE p.id_user = :id_author
AND u.id = $_SESSION['id']
AND u.active = 1
limit 1;

现在我想使用 JOIN 而不是 ,。但是这两个表之间没有任何公共(public)列。那么ON子句应该怎么写呢?


我正在尝试做的事情:

我有三个表:

// Posts
+----+----------+---------------+-----------+
| id | title | content | id_author |
+----+----------+---------------+-----------+
| 1 | title1 | content1 | 1234 |
| 2 | title2 | content2 | 5678 |
+----+----------+---------------+-----------+
// ^ the id of post's author

// Users
+----+--------+--------+
| id | name | active |
+----+--------+--------+
| 1 | jack | 1 |
| 2 | peter | 0 |
| 3 | John | 1 |
+----+--------+--------+

// Votes
+----+---------+---------+
| id | id_post | id_user |
+----+---------+---------+
| 1 | 32 | 1234 |
| 2 | 634 | 5678 |
| 3 | 352 | 1234 |
+----+---------+---------+
// ^ the id of current user

现在我需要在将新投票插入到 Votes 表之前检查两个条件:

  1. 作者的 ID 是否与我传递的 id_author 相同? Posts.id_user = :id_author(我知道我可以通过 FK 做到这一点,但我不想)
  2. 当前用户的帐户是否有效? Users.active = 1

总结:我试图不让不活跃的人能够投票(active = 0)。例如,如果 Stackoverflow 禁止你,那么你不能再对帖子投票,因为你(当前用户)被禁止了。所以我很确定在查询中应该使用 $_SESSION['id'] 来确定当前用户。

最佳答案

我建议使用 exists 而不是 join:

INSERT INTO Votes (id_post, id_user) 
SELECT id_post, id_user FROM (SELECT ? id_post, ? id_user) a
WHERE EXISTS (
SELECT 1 FROM Users
WHERE id = ?
AND active = 1
) AND EXISTS (
SELECT 1 FROM posts
WHERE id_user = :id_author
)

关于mysql - 如何使用 JOIN 而不是逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com