У меня есть этот запрос:Как использовать JOIN вместо запятой?
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
вместо ,
. Но между этими двумя таблицами нет общего столбца. Итак, что я должен писать в статье 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
таблицы:
- Является ли идентификатор автора таким же, как то, что я передаю как
id_author
?Posts.id_user = :id_author
(Я знаю, что могу сделать это с помощью FK, но я не хочу) - Аккаунт текущего пользователя активен?
Users.active = 1
Резюмируем: Я пытаюсь не позволить людям иметь возможность голосовать, которые неактивны (active = 0
). Например, если Stackoverflow запрещает вам, то вы больше не можете голосовать за сообщения, потому что вы (текущий пользователь) запрещены. Поэтому я уверен, что $_SESSION['id']
должен использоваться в запросе для определения текущего пользователя.
Это очень хорошо .. upvote .. но неполный (он просто проверяет второе условие). Мне также нужно проверить таблицу 'Posts'' 'p.id_user =: id_author'. – stack
Да .. это правильно сейчас .. теперь я не знаю, что ваш запрос лучше или мой ('join' vs' exists') – stack
хороший ответ. Upvote. – e4c5