Я пытался получить этот комплекс MYSQL-запрос для работы точно в течение последних нескольких дней, конечно, потому что у него так много аспектов, что его очень сложно знайте, что он работает на 100%, и я не совсем хорош с более сложными запросами MYSQL. также этот запрос, который у меня сейчас, довольно грязный, поэтому возвращаемые данные немного разбросаны, и я не совсем уверен, как решить эту проблему. Я прочитал MYSQL Join и все, и я это понимаю, но я не уверен, что использовать в моем случае и как правильно их использовать.упрощение запроса MYSQL и исправление
Вот мой текущий запрос, который работает так, как должен. (Просто нуждается в очистке, я думаю, так что я не должен иметь избыточные значения)
$notificationsq = mysql_query("SELECT
N.*,
N.fromID,
N.date,
N.id AS ID, //I have to do this because if I don't it doesn't return anything,
///I guess because it joins 3 tables with the id column. not sure
///how to call the correct data.
MIN(N.state) AS State,
MAX(N.date) AS newDate,
P.*,
C.*,
P.id AS uniqueID
FROM notifications N
LEFT JOIN comments C ON N.action = 2 AND N.uniqueID = C.id AND C.state=0
LEFT JOIN posts P ON N.action = 1 AND P.id = N.uniqueID
OR N.action = 2 AND P.id = C.postID
WHERE N.userID = '$session'
AND (N.action = 1 AND N.state IN (0, 1) OR N.action = 2)
AND P.state = 0
GROUP BY P.id
ORDER BY
State ASC,
newDate DESC
") or die(mysql_error());
Моя структура таблицы:
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, то UniqueID являются для «ид» в таблице комментариев. То, что я хочу, чтобы вернуть это сообщения дан, поэтому в запросе было бы просто, как если бы UniqueID был вместо этого:
1
2
1
1
1
Создание его LEFT JOIN не представляется никакой разницы, и добавление «C.state = 0 "все еще возвращает ошибку mysql –
какая ошибка mysql? – amccausl
О, извините, на самом деле я ошибочно поставил цитату, где она не принадлежала, но на самом деле она работает так, как должна. И я сейчас понимаю, что она действительно работала так, как предполагалось раньше, но я wasn обращая внимание на детали ... Так что эта проблема решена, однако мне все равно нужна помощь в очистке этого кода и, если это возможно, кажется довольно запутанным. –