2017-05-10 1 views
0

C'est un dur pour moi. J'ai une table qui contient des notifications d'utilisateurs. Il y a une colonne "VIEWED" où 0 signifie qu'elle n'a PAS été vue, 1 signifie qu'elle l'a été.MYSQL LIMIT seulement les valeurs où "vu" = 1, mais pas vu = "0"

Je veux générer ma liste de notifications, SELECT * qui n'est pas consultée (0), mais dans le cas où je n'ai pas de notification non affichée, je ne veux pas afficher simplement "non notififications" Je veux afficher quelques vieux.

Je montre déjà ma plus récente non vue. Existe-t-il un moyen de faire quelque chose qui montre que TOUS ne sont pas consultés, mais seulement quelques-uns sont vus? Comme ci-dessous?

$QUERY= "SELECT * FROM point_member_notifications WHERE account_id='$accountid' ORDER BY viewed ASC, created_date DESC (LIMIT 10 WHERE VIEWED='1') " 

Répondre

0

Peut-être que vous voulez UNION ALL, de limiter les «VIEWED' les anciens, il suffit de placer la clause limit dans les parenthèses qui entourent le SELECT

(SELECT * FROM point_member_notifications WHERE account_id='$accountid' ORDER BY viewed ASC) 
UNION ALL 
(SELECT * FROM point_member_notifications WHERE account_id='$accountid' WHERE VIEWED='1' created_date DESC LIMIT 10); 
+0

Vous avez raison ... et vous avez répondu en premier. C'est en fait une solution assez simple trop lol. –

0

Vous pouvez utiliser une combinaison de LIMIT et UNION (ou UNION ALL si vous ne voulez pas supprimer les enregistrements en double). Cela pourrait ressembler à:

(SELECT * 
FROM point_member_notifications WHERE account_id='$accountid' AND VIEWED='1' 
ORDER BY created_date DESC LIMIT 10) 
UNION ALL 
SELECT * 
FROM point_member_notifications WHERE account_id='$accountid' AND VIEWED='0' 
ORDER BY created_date DESC 
LIMIT 10 

Si vous voulez avoir 10 enregistrements non lus + les 10 anciens dossiers dont vous avez besoin de mettre le 2 SELECT entre parenthèses trop, sinon la limite de 10 à la fin limitera la chose. Un ORDER BY ne devrait pas être nécessaire étant donné que UNION sélectionne d'abord le non consulté, puis les autres.