PostGrSQL SELECT DISTINCT un truc pas clair SVP - SQL/NoSQL - Programmation
Marsh Posté le 23-05-2020 à 14:18:57
Bonjour ! Dans la deuxième requête, c'est le couple (champ_1, champ2) qui est unique.
Posons la question autrement : quelles sont les données à récupérer, on verra bien comment c'est possible de les obtenir.
Je précise ma pensée : Si on a plusieurs champ_2 pour un même champ_1, je ne vois pas comment récupérer (champ_1, champ_2) en ayant champ_1 unique, sans lui indiquer comment choisir.
Marsh Posté le 23-05-2020 à 17:20:09
D'accord
donc voila je cherche toutes les pages contenant des liens vers telle ou telle page.
exemple ci-dessous
http://www.ypikay.fr/ou_est_mon_li [...] velobs.com
en gros la structure de la table
UNIQUE adresse_a+lien_b / adresse_a / lien_b / date
quand je trouve une adresse_a qui contient le lien_b je crée le couple unique adresse_a+lien_b et je rentre adresse_a et lien_b
(ce sont les deux colonnes que l'on voit)
maintenant on voit que la page http://nobipho.hypotheses.org renvoie 4 résultats
si je fais SELECT adresse_a cette adresse n'apparaitra plus qu'une fois ( plus propre et c'est ce que je voudrais ) mais je ne pourrai gérer que cette colonne.
je voudrais faire SELECT DISTINCT adresse_a, lien_b et je sais que ce n'est pas possible ou du moins ça ne retourne rien.
MERCI
Marsh Posté le 23-05-2020 à 17:51:27
Regarde du coté des group by ?
Sinon, je suis preneur d'un exemple avec des données et le resultat souhaité
dd
Marsh Posté le 23-05-2020 à 17:56:58
ReplyMarsh Posté le 23-05-2020 à 23:52:50
J'essaye de faire un tableau ici, c'est pas gagné
l'exemple donc est ici (je cherche toutes les pages de ma BdD qui pointent vers nouvelobs.com)
ça me retourne un tableau, première ligne est la page scannée, deuxième ligne est l'adresse trouvée qui contient nouvelobs.com
maintenant, pour chaque page scannée, je voudrais une seule ligne avec en regard, tous les enregistrements de liens trouvés
http://www.ypikay.fr/ou_est_mon_li [...] velobs.com
au lieu de l'exemple ci dessous (3 liens troucés sur nobipho, 3 liens différents donc 3 lignes dans mon tableau)
Code :
|
je voudrais 1 ligne avec la page nobipho et ensuite, une ligne ou un enregistrement qui retourne tous les liens trouvés, mais je voudrais que ça le fasse pour chaque page
Code :
|
Marsh Posté le 24-05-2020 à 05:47:37
Bonjour !
Ok, je vois mieux. Je ne sais pas si c'est réalisable en SQL, mais en PL SQL dans une procédure stockée, cela l'est assez facilement, en créant une fonction qui prend une valeur de champ1 en paramètre et renvoie une chaine contenant les liens trouvés pour cette valeur.
En tous cas, je le ferais comme ça, vu que je ne vois pas trop comment le faire autrement
Marsh Posté le 24-05-2020 à 08:15:23
En effet, il faut utiliser les extensions de Postgres de manipulation de chaînes de caractère.
https://www.postgresqltutorial.com/ [...] -function/
Mais surtout la vraie question est: est-ce souhaitable de stocker les données comme ça ?
Parce que tu t'interdis à l'avenir de retrouver efficacement les données du champ2. La moindre recherche sur champ2 devient un cauchemar qui fera un scan et sera donc lent. Tu perds une grande partie de l'intérêt d'un SGBD.
Alors qu'en stockant les couples (lien1, lien2), même s'il y a des répétitions de lien1, une petite fonction avec un simple GROUPBY et les fonctions de manipulation de caractère permettent de retourner le résultat que tu veux rapidement tout en préservant la facilité à requêter la base dans tous les sens.
Marsh Posté le 23-05-2020 à 10:06:25
Hello
soit une table dans laquelle j'ai un champ (champ_1) qui contient des valeurs qui ont des doublons
quand je fais cette requete:
pas de problème j'ai une seule occurence de champ_1 qui ensuite est ordonnée par rapport à ce que je demande sur champ_2
Maintenant, je ne peux traiter QUE champ_1
Si je veux faire
(par exemple)
ci dessus donc, j'ai deux champs dans mon SELECT mais JE PERDS mon DISTINCT, du coup, tous les champ_1 en doublons sont renvoyés.
Auriez-vous une aide parce que la doc postgresql n'est pas claire à ce sujet.
---------------
http://www.ypikay.com