У меня три таблицы:
// Posts +----+----------+---------------+-----------+ | id | title | content | id_author | +----+----------+---------------+-----------+ | 1 | title1 | content1 | 1234 | | 2 | title2 | content2 | 5678 | +----+----------+---------------+-----------+ // 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 | +----+---------+---------+
Теперь мне нужно проверить два условия, прежде чем вносить новый голос в таблицу Votes
:
Posts.id_user = :author
(я знаю, что могу сделать это с помощью FK, но я не хочу) Users.active = 1
Также здесь мой запрос:
INSERT INTO Votes (id_post,id_user) SELECT ?,? FROM Posts p WHERE p.id_user = :author limit 1;
Как добавить к моему запросу второе условие Users.active = 1
?
EDIT: На самом деле я стараюсь, чтобы люди не могли голосовать, кто неактивен ( active = 0
) . Например, если SO запрещает людям, то я больше не могу голосовать, потому что я (текущий пользователь) запрещен. Поэтому я уверен, что в запросе следует использовать $_SESSION['id']
.
INSERT INTO Votes (id_post,id_user) SELECT p.id,u.id FROM Posts p, Users u WHERE p.id_user = :author AND u.id = :user AND u.active = 1 limit 1;
то вы устанавливаете параметр user
равным текущему идентификатору пользователя.
EDIT : Я полагаю, id_user
в таблице Votes
должен быть идентификатором избирателя, а не автором сообщения (правильно?), Поэтому я исправил запрос, исключающий JOIN
.
Использовать и с помощью
INSERT INTO Votes (id_post,id_user) SELECT ?,? FROM Posts p, Users u WHERE p.id_user = :author and u.active = 1 limit 1;
INSERT INTO Votes (id_post,id_user) SELECT p.id, u.id FROM Posts p INNER JOIN Users u ON 1 = 1 WHERE p.id_user = :author AND u.id = :current_user_id AND u.active = 1 LIMIT 1;