2
votes

Mysql a quitté la jointure avec concaténer?

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


2 commentaires

Veuillez montrer votre résultat attendu. Comme vous pouvez le voir sur votre image, le pnumbers se répète, mais le id (troisième colonne de droite à gauche) est unique, nous ne savons donc pas quel identifiant que vous souhaitez conserver.


Vous devez savoir que l'utilisation de LEFT JOIN signifie 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ête SELECT uniqid, count (*) FROM contacts GROUP BY uniqid pour voir s'il y a un uniqid compter une valeur supérieure à 1. S'il y en a, ce n'est pas si unique après tout.


4 Réponses :


2
votes

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


0 commentaires

5
votes

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


1 commentaires

group by id est ambigu.



2
votes

Vous pouvez utiliser DISTINCT pour filtrer les doublons:

SELECT DISTINCT pnumber FROM contacts LEFT JOIN numbers ON contacts.uniqid = numbers.cid 


0 commentaires

1
votes

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


0 commentaires