0
votes

MYSQL GAUCHE À GAUCHE - donne le même résultat plusieurs fois

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.

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. < Pré> xxx

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.

J'ai essayé ceci: 1. xxx

- me donne le nombre correct d'annonces, mais uniquement créé pour la première xxx

- - Me donne une annonce pour chaque enregistrement dans les paiements


2 commentaires

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 () , comptez () , max () ...) Vous devez regrouper les résultats en utilisant groupe par . 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 utiliser groupe par sur au moins 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é.


3 Réponses :


3
votes

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


5 commentaires

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/...



0
votes
    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

0 commentaires

0
votes

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: xxx

ou quelque chose comme que


0 commentaires