Я имею дело с sql, и мой sql не так хорош, как мой ruby, поэтому я надеюсь, что вы можете мне помочь.Помогите, возможно, вложенный sql-запрос
У меня есть да таблица, которая выглядит следующим образом:
messages:
id INTEGER PRIMARY KEY AUTO_INCREMENT
to VARCHAR(255)
text text
shown DATETIME
Пока мой сценарий генерирует эту часть в зависимости от количества игроков в онлайн.
"to = 'STEAM_0:0:xxx' OR to = 'STEAM_0:0:xxy' OR to = 'STEAM_0:0:xxz'"
Это прослушивание активных игроков, и я хочу проверить погоду у них есть непрочитанные сообщения. Теперь с этой строки я могу сделать и Sprintf с этим:
SELECT * FROM messages WHERE shown IS NULL AND (%s)"
и получить хороший отформатированный строку:
SELECT * FROM messages WHERE shown IS NULL AND (to = 'STEAM_0:0:xxx' OR to = 'STEAM_0:0:xxy' OR to = 'STEAM_0:0:xxz')
Теперь у меня есть только две проблемы:
- SQL, возвращает более 1 записи для каждой записи поля
to
, я хотел бы вернуть ровно одно сообщение за каждыеto
(LIMIT 1 отto
?), и он должен быть самым новым (сначала по id) ,
Чтобы сделать это более ясным, давайте предположим, что у меня есть таблица вроде этого:
id, to, text
1, "x", "text1"
2, "x", "text2"
3, "y", "text3"
4, "z", "text4"
5, "y", "text5"
6, "z", "text6"
7, "y", "text7"
Я хочу, чтобы получить следующее:
1, "x", "text1"
3, "y", "text3"
4, "z", "text4"
- Я хотел бы обновить поле
shown
в том же SQL-вызове для NOW() для извлеченных записей.
где uniqueid находится в таблице? – Dani
'to' - очень плохое имя для столбца. Это зарезервированное слово в MYSQL, поэтому вам нужно будет убежать или идентифицировать его как таковое с префиксом таблицы каждый раз, когда вы ссылаетесь на него. Вероятно, вы или кто-то другой иногда забудете это сделать, а затем это вас раздражает. Может быть, что-то вроде получателя будет лучшим выбором? См. Здесь для получения более подробной информации: http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html –
бежать с помощью 'to', мне все равно, я хочу реальное решение, а не некоторые вопиющие о соглашениях. –