То, что вы имеете в виду, я думаю, можно сделать с тонким использованием JOIN
или вложенных SELECT
, ORDER BY
, LIMIT
и т. Д., Но, как вы предполагаете, это будет "ужасно надуманным" "и, вероятно, довольно медленно.
Как вы подозреваете, вы бы избавили себя от многих проблем в SELECT
раз, если бы добавили в таблицу столбец, в котором, для ответов, есть первичный ключ вопроса, на который они отвечают (это может быть легко получено в INSERT
раз, так как это последняя запись с пользователем равным Алексу). Тогда поиск будет проще!
Если вы можете изменить свою схему таким образом, но вам нужна помощь с SQL, пожалуйста, прокомментируйте или отредактируйте свой ответ, чтобы указать это, и я буду рад продолжить (аналогично, я был бы рад продолжить, если вы Вы застряли в этой схеме и нуждаетесь в «ужасно надуманном» SQL - я просто не знаю, какая из этих двух возможностей применима! -).
Редактировать: поскольку схема изменилась, INSERT
может быть (используя форму: имя, чтобы указать параметры, которые вы должны связать):
INSERT IGNORE INTO andyasks
(questions, date, user, answering)
SELECT :text, :created_at, :from_user,
IF(:from_user='Andy', NULL, aa.id)
FROM andyasks AS aa
WHERE user='Andy'
ORDER BY date DESC
LIMIT 1
Т.е.: использовать INSERT INTO ... SELECT' to do a query-within-insertion, which picks the latest post by Andy. I'm assuming you do also have a primary key
id` - это автоинкремент, который является нормальным расположением вещей.
Позже, чтобы получить все ответы на заданный вопрос, вам нужно только выбрать строки, атрибут answering
которых равен id
.
этого вопроса.