2016-01-06 1 views
0

J'ai une table comme ceci:Combien de lignes ont été sélectionnées?

// mytable 
+----+-----------------+ 
| id | timestamp | 
+----+-----------------+ 
| 1 | 1452001861  | -- yesterday 
| 2 | 1452088272  | -- today 
| 3 | 1452088283  | -- today 
| 4 | 1451915461  | -- last week 
| 5 | 1452001861  | -- yesterday 
| 6 | 1452088263  | -- today 
| 7 | 1252388263  | -- out of {today, yesterday, last week} 
| 8 | 1452088312  | -- today 
| 9 | 1452001762  | -- yesterday 
| 10 | 1222388263  | -- out of {today, yesterday, last week} 
| 12 | 1451915459  | -- last week 
+----+-----------------+ 

Et voici ma question:

SELECT * FROM mytable 
    WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY 
    ORDER BY timestamp DESC 

La requête ci-dessus sélectionner toutes les lignes avec sont entre maintenant et 7 derniers jours.


Maintenant, parfois toutes les lignes sont avant 7 derniers jours (je veux dire est la toute dernière ligne est par exemple ajouté en 8 jours) puis la sortie de cette requête ne sera rien (0 ligne sélectionnée). Ce que je veux, c'est s'il n'y a pas de ligne sélectionnée (0 lignes), puis 5 dernières lignes (qui ont été ajoutées plus tôt). Comment puis je faire ça?

Répondre

2

Vous pouvez essayer cette approche:

SET @row_count := (SELECT COUNT(*) 
        FROM mytable 
        WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY); 

IF (@row_count > 0) THEN 
    SELECT * 
    FROM mytable 
    WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY 
    ORDER BY timestamp DESC; 
ELSE 
    SELECT * 
    FROM mytable 
    ORDER BY timestamp DESC 
    LIMIT 5; 
END IF; 
+0

Semble correct, mais il est d'optimiser? Je pense qu'il faut beaucoup de traitement ..! Fredonner? – stack

+1

Comme la première requête est seulement là pour obtenir un compte, vous pouvez supprimer le 'ORDER BY' pour réduire la charge un peu – RiggsFolly

+0

Je pense aussi avoir lu quelque part que' count (id) 'par exemple est plus rapide que' count (*) 'probablement encore mieux si c'est un champ indexé – RiggsFolly