2012-01-07 2 views
1

Я пытался заставить свой код работать в точности, он работает по большей части отлично, за одним исключением. Это сложно объяснить словами, поэтому я постараюсь показать вам с чем я имею дело.Необходимая справка справки MYSQL SELECT

Во-первых, вот мой MYSQL QUERY до сих пор, (что все должно оставаться в значительной степени то же самое, или, по крайней мере, сделать то же самое это делает)

$notificationsq = mysql_query("SELECT N.*, P.*, 
    (CASE 
    WHEN 
    (N.action = 2 AND N.state = 0) THEN 1 
    ELSE N.state 
    END) AS state 
    FROM 
    notifications N, 
    posts P 
    WHERE N.userID='$session' AND 
     (N.action='1' OR N.action='2') AND 
     N.uniqueID=P.id AND 
     P.state='0' 
    GROUP BY N.uniqueID 
    ORDER BY N.state ASC, N.date DESC 
"); 

Вот мои настройки таблицы для уведомлений (код относящегося таблицы сообщений не имеет отношения к моей проблеме) http://i43.tinypic.com/2wd6phl.png

что каждая строка представляет (только те строки, которые не понятен):

  • uniqueID - это идентификатор сообщения, о котором должно быть уведомлено.
  • деятельность - это какой-либо извещение. 1 - новое сообщение, 2 - новый комментарий к сообщению.
  • Состояние: прочитано или нет уведомление. 0 не читается, 1 считывается.

прямо сейчас «state» возвращает только сообщения (action = 1), которые являются непрочитанными (state = 0), однако я хочу, чтобы он возвращал «состояние» как 0 для сообщения, если какой-либо из сообщений получает новый комментарий.

это как,
IF (действие == 2 == И состояние 0 WHERE UniqueID == UniqueID) {состояние = 0}

+1

Формат и отступ SQL утверждение должным образом. – Lion

+1

Я отформатировал sql :) –

ответ

3

как об этом:

SELECT 
    `N`.*, 
    `P`.*, 
    `N`.`state` AS `state` 
FROM 
    (
     SELECT 
      * 
     FROM 
      `notifications` 
     WHERE 
      `userID`='$session' 
     AND 
      (
        (
          `action`='1' 
         AND 
          `state` = 0 
        ) 
       OR 
        `action`='2' 
      ) 
     ORDER BY 
      `state` ASC, 
      `date` DESC 
    ) AS `N`, 
    `posts` AS `P` 
WHERE 
    `N`.`uniqueID`=`P`.`id` 
GROUP BY 
    `N`.`uniqueID` 
+0

Нет ошибки с этим, однако он делает то же, что и сейчас. Спасибо хоть. –

+0

@DylanCross я его отредактировал, попробуй еще раз :) – davogotland

+0

Ой, вау, это действительно работает отлично, и тебе удалось значительно уменьшить код, ИСКЛЮЧАЕТ, что он не возвращает уведомления, которые были прочитаны, как и раньше. –