Je suis nouveau au codage et j'ai rencontré un problème SQL que j'espère que vous pouvez aider. J'utilise PHP et MySQL.
Le problème est que je rejoins des tables ensemble, mais je reçois le même résultat plus que des personnes. Je n'ai besoin que des annonces avec la date de création la plus récente des paiements. P>
Je veux montrer des annonces d'une table et rejoindre une autre table où elle est définie lorsqu'il a été payé pour la dernière fois. P> < Pré> xxx pré>
Je peux avoir plusieurs enregistrements dans la table de paiement pour chaque annonce et quand je suis parti, je reçois chaque annonce le même temps que j'ai des enregistrements pour les paiements. P>
J'ai essayé ceci:
1. p> - me donne le nombre correct d'annonces, mais uniquement créé pour la première p> - - Me donne une annonce pour chaque enregistrement dans les paiements p> p>
3 Réponses :
Vous avez besoin du groupe par code> pour regrouper tout le paiement à partir d'une annonce et d'utiliser max () code> pour obtenir le dernier paiement de cette annonce: SELECT ads.*, max(payments.created)
FROM ads
LEFT JOIN payments ON payments.ads_id=ads.id group by payments.ads_id
Oui! (Tape m'en cinq)
Merci gars pour votre aide. Ça a marché comme sur des roulettes :)
Pas de soucis mate :)
J'ai en quelque sorte un problème similaire avec Som rejoint. J'ai cette annonce et une annonce peut avoir plusieurs images triées par une valeur (sortOrder). Maintenant, je veux mon annonce et une seule photo (nom de fichier). La photo que je veux a la table de tri la plus basse des «annonces» et «ads_pictures». Comment je fais ça? :) désolé si cette question a besoin de son propre fil
J'ai plutôt créé un nouveau sujet Stackoverflow.com/Questtions/55381032/...
SELECT AD.ID , AD.TITLE, FINAL_PAYMENT.AMOUNT, FINAL_PAYMENT,CREATED
FROM AD
JOIN
( SELECT AD_ID, AMOUNT , CREATED FROM PAYMENT P1
WHERE CREATED = (SELECT MAX(CREATED) FROM PAYMENT P2
WHERE P1.AD_ID = P2.AD_ID
GROUP BY P2.AD_ID
)
) FINAL_PAYMENT
ON
AD.ID = FINAL_PAYMENT.AD_ID
sur l'hypothèse que vous souhaitez afficher à la fois la date et le montant associé, une solution typique (au moins pré-mysql 8) ressemble à ceci: ou quelque chose comme que p> p>
Pour développer ce que Caton a dit dans sa réponse ci-dessous, lors de l'utilisation de fonctions agrégées (telles que
somme () code>,comptez () code>,max () code> ...) Vous devez regrouper les résultats en utilisantgroupe par code>. D'autres moteurs de base de données telles que SQL Server Absolutley l'exigent, pour de bonnes raisons. MySQL est assez lâche avec cela, mais vous devez toujours utilisergroupe par code> sur au moins i> une colonne lorsque vous utilisez des fonctions agrégées.Cela vous donne un enregistrement pour chaque paiement associé à chaque annonce, ce que vous avez demandé.