Так что это кажется простой маленькой проблемой, но мне не удалось заставить ее работать должным образом. У меня есть таблица комментариев, таблица сообщений и таблица уведомлений. Ранее я сохранял postID в столбце «uniqueID» для уведомлений и комментариев. Теперь я изменил его так, чтобы уникальный идентификатор комментариев сохранялся в этом столбце. Поэтому все, что мне нужно сделать, это для каждой строки, являющейся комментарием в уведомлениях, перейти в таблицу комментариев, где uniqueID == id, а затем вернуть значение в этой таблице с именем postID.
Вот фотография, на которой мой вопрос лучше.
http://i41.tinypic.com/nyzolg.png
Информация с фото:
Table: Notifications
id UserID FromID UniqueID Action State Read_Date Date
1 1 2 1 1 0 0 1325993600
2 1 6 2 1 0 0 1325993615
3 1 2 1 2 0 0 1325993622
4 1 6 2 2 0 0 1325993661
5 2 6 2 2 0 0 1325993661
Действие = 1 означает, что UniqueID идентифицирует строку в сообщениях;
Действие = 2 означает, что UniqueID идентифицирует строку в комментариях.
Table: Posts
id ToID FromID Post State Date
1 1 2 Hey 0 1325993600
2 1 6 okay yeah 0 1325993615
Table: Comments
ID PostID FromID Comment State Date
1 1 2 lol 0 1325993622
2 1 6 ohh 0 1325993661
Итак, в таблице уведомлений, где действие равно 2, уникальные идентификаторы предназначены для идентификатора в таблице комментариев.
То, что я хочу вернуть, это PostID, поэтому в запросе это будет так, как если бы это был UniqueID:
1
2
1
1
1
Но UniqueID останется прежним, когда Action равно 1.
Мой текущий запрос таков, и он работал нормально, пока я не изменил значения в моей базе данных.
$notificationsq = mysql_query("
SELECT
N.*,
P.*,
MAX(N.date) AS newDate
FROM
notifications N,
posts
WHERE
N.userID='$session'
AND
(
(
N.action='1'
AND
(N.state = 0 OR N.state=1)
)
OR
N.action='2'
)
AND P.state='0'
AND
N.uniqueID=P.id
GROUP BY
N.uniqueID
ORDER BY
N.state ASC,
newDate DESC
") or die(mysql_error());