2014-07-21 4 views
0
SELECT *, IF(start_date < ".$twoDaysAgo.", (posts/172800 * 50000), (posts/(".$curTime." - start_date) * 50000)) as rating 
FROM 
(
    SELECT t1.*, t2.*, count(t2.id) as posts 
    FROM topics as t1 
    LEFT JOIN 
    (
     SELECT id, topic_id as tid, poster, body, post_date, poster_ip, subject 
     FROM messages t9 
    ) as t2 
    ON t1.topic_id = t2.tid 
    GROUP BY t1.topic_id 
) as t3 
ORDER BY rating DESC, topic_id ASC 

colonne posts donne le post-tout-temps des sujets. C'est bon, je le veux. Mais je veux en plus avoir les post-comptes des sujets au cours des 2 derniers jours. En d'autres termes, je dois obtenir les post-comptes alltime-post et les post-comptes de deux jours en une seule requête.Une requête complexe de sélection

sujets de table: topics http://easycaptures.com/fs/uploaded/802/8788454634.png

messages de table: messages http://easycaptures.com/fs/uploaded/802/8788454634.png

+0

Veuillez ajouter un exemple de données et le résultat souhaité à partir de ces données. Ce sera beaucoup plus facile de vous aider. –

+0

@JorgeCampos ajouté – Wellenbrecher

+0

Il semble que MarcB vous a répondu. Voir si cela fonctionne. –

Répondre

1

Quelque chose comme ça marcherait:

SELECT count(*) AS all_time, SUM(start_date > $twoDaysAgo) AS last_2_days 

MySQL convertit automatiquement la valeur booléenne de comparaison start_date à un nombre entier 0 ou 1, puis résumez ces 1, vous donnant effectivement le nombre dont vous avez besoin.

+0

Pouvez-vous le mettre dans ma requête? – Wellenbrecher