2010-12-06 8 views
0

J'ai une table qui contient les dates d'échéance pour les enregistrements de membres individuels. Chaque ligne contient quatre champs:Problème lors de la combinaison de deux requêtes SQL en une seule

ID  | Next_Due | Next_Due_Missed | Amount 
============================================================= 
    123 | 2010-12-05 |  NULL   | 41.32 
    456 | 2010-12-10 |  2010-12-05  | 21.44 
    789 | 2010-12-20 |  2010-12-10  | 39.99 

ID est l'identifiant unique de chaque membre

Suivant En raison - est le jour suivant en raison de leur période d'abonnement standard

Next_Due_Missed est peuplée seulement s'il y avait un erreur de collecte du premier tour de paiement de l'abonnement.

Le montant est la somme détenue pour l'abonnement.

Mon but est de créer une requête sql qui vérifie si next_due_missed existe et n'est pas nulle. Si c'est le cas, utilisez cette valeur comme '$ date'. Sinon, définissez $ date = valeur de next_due

cela est assez simple, sauf que mes résultats sont groupés par Next_Due dans des circonstances normales et omet next_due_missed si je combine mon mode de fonctionnement actuel.

Chaque période de paiement, il peut y avoir plus de 600 enregistrements avec next_due égal à la date souhaitée (et 10-15 égal à next_due_missed).

Ma requête en cours est:

$stmt = $db->prepare("SELECT next_due, next_due_missed FROM table_name WHERE (next_due > CURDATE() OR next_due_missed > CURDATE()) GROUP BY next_due ASC"); 

Cela ne renvoie les résultats pour next_due cependant. L'omission de la clause GROUP BY renvoie des centaines de résultats (alors que je dois regrouper dans cette étape). De même, à un moment ultérieur, je devrai sortir ces enregistrements individuels et créer des enregistrements de paiement basés sur les valeurs 'next_due' et 'next_due_missed'.

Des idées que je manque?

Répondre

1

Je ne suis pas sûr que le but de votre GROUP BY autre que pour obtenir des valeurs DISTINCTS, mais laissé dans au cas où vous fourni une requête partielle:

SELECT coalesce(next_due_missed, next_due) as EffectiveNextDue 
FROM table_name 
WHERE coalesce(next_due_missed, next_due) > CURDATE() 
GROUP BY coalesce(next_due_missed, next_due) 
+0

wow - quelle solution simple! Je vous remercie beaucoup pour votre aide! Je n'étais même pas au courant de la fonction – JM4

+0

aussi de bons conseils sur DISTINCT, permettra de réduire la recherche et le tri. – JM4

Questions connexes