J'ai deux tables qui ressemblent à ceci
id, fname, lname, email, address, uid, uniqid, id, pnumber,pnumber,pnumber, cid
SELECT * FROM contacts LEFT JOIN numbers ON contacts.uniqid = numbers.cid
Ceci est mon code SQL
numbers --------------------- | id | pnumber | cid | ---------------------
L'uniqid est le même que le cid, mon problème est que lorsque j'essaye de rejoindre à gauche ces deux tables, il renvoie ceci
Remarque: Désolé, j'ai dû utiliser une image parce que lorsque j'essaie d'utiliser du texte, il se brise
Je veux obtenir tous les nombres dans une seule colonne sans répéter. Y a-t-il un moyen d'y parvenir ou dois-je utiliser PHP?
Résultats attendus
contacts ------------------------------------------------------- | id | fname | lname | email | address | uid | uniqid | -------------------------------------------------------
4 Réponses :
Vous pouvez utiliser GROUP BY instruction et fonction GROUP_CONCAT
SELECT contacts.* GROUP_CONCAT(numbers.pnumber) FROM contacts LEFT JOIN numbers ON contacts.uniqid = numbers.cid GROUP BY contacts.id, contacts.fname, contacts.lname, contacts.email, contacts.address, contacts.uid, contacts.uniqid
utilisez group_concat () avec distinct
SELECT contacts.id, fname, lname, email, address,uid,uniqud, group_concat(distinct pnumber order by pnumber),cid FROM contacts LEFT JOIN numbers ON contacts.uniqid = numbers.cid group by contacts.id, fname, lname, email, address,uid,uniqud,cid
group by id est ambigu.
Vous pouvez utiliser DISTINCT pour filtrer les doublons:
SELECT DISTINCT pnumber FROM contacts LEFT JOIN numbers ON contacts.uniqid = numbers.cid
Essayez ceci -
SELECT c.*, GROUP_CONCAT(n. pnumber SEPARATOR ', ') FROM contacts as c LEFT JOIN numbers as n ON c.uniqid = n.cid
GROUP BY c.id, c.fname, c.lname, c.email, c.address, c.uid, c.uniqid
Veuillez montrer votre résultat attendu. Comme vous pouvez le voir sur votre image, le
pnumbersse répète, mais leid(troisième colonne de droite à gauche) est unique, nous ne savons donc pas quelidentifiantque vous souhaitez conserver.Vous devez savoir que l'utilisation de
LEFT JOINsignifie que si vous avez répété une valeur dans le tableau de gauche, elle affichera tout. Cela étant dit, vous pouvez essayer une simple vérification sur votre table de gauche en exécutant cette requêteSELECT uniqid, count (*) FROM contacts GROUP BY uniqidpour voir s'il y a ununiqid code > compter une valeur supérieure à 1. S'il y en a, ce n'est pas si unique après tout.