Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1859 connectés 

  FORUM HardWare.fr
  Programmation

  [mysql] requete trop complexe pour moi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[mysql] requete trop complexe pour moi

n°84843
drlobo
Posté le 29-12-2001 à 12:44:04  profilanswer
 

bon alors voila, j'ai 2 tables dont voici les champs utiles:
table song:
band_id
album_id
song_name
song_id
 
table_album:
band_id
album_id
album_name
 
voici maintenant l'énoncé: je souhaiterai sélectionner les songs qui sont en double (donc meme song_name et meme band_id) et qui ont comme nom d'album "Unknown Album".
 
je sais pas c'est clair alors je fais un petit exemple
 
album_id  Album_name
    1       alb1
    2       alb2
    3   Unknown Album
 
song_id  band_id album_id song_name
   1         1        1     nom1
   2         1        2     nom1  
   3         1        3     nom1
 
la requete devra selectionner uniquement song_id=3 (song_name et band_id apparait plusieurs fois et le nom de l'abum est Unknown Album)
 
je suis partis sur cette requete:
SELECT song.band_id,song_name, count(*) FROM song inner join album on song.album_id=album.album_id where album_name=\"Unknown Album\" GROUP by band_id,song_name having count(*)>1
 
mais ca ne selectionne que les song qui sont en double dans l'album "Unknown Album"

mood
Publicité
Posté le 29-12-2001 à 12:44:04  profilanswer
 

n°84845
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 12:57:37  profilanswer
 

je comprends pas :
tu obtiens ça : "mais ca ne selectionne que les song qui sont en double dans l'album "Unknown Album""
et tu veux ça :
les songs qui sont en double (donc meme song_name et meme band_id) et qui ont comme nom d'album "Unknown Album".
 
C'est pareil non ?

n°84849
Autruche
bla bla bla....
Posté le 29-12-2001 à 13:24:07  profilanswer
 

:lol:


---------------
Dezintoxikation
n°84853
drlobo
Posté le 29-12-2001 à 13:31:50  profilanswer
 

je sais c'est difficile a expliquer, je refait un exemple
album_id  Album_name  
   1       alb1  
   2       alb2  
   3   Unknown Album
   4   Unknown Album  
 
song_id  band_id album_id song_name  
  1         1        1     nom1  
  2         1        2     nom1    
  3         1        3     nom1  
  5         2        4     nom2    
  6         2        4     nom2  
 
avec ma requete il me sort uniquement nom2 (car les doubles ont tous comme album "unknown album" ) mais j'aimerai qu'il me sorte aussi nom1 (ca un des doubles(j'entend par double meme song_id et meme band_id) a un comme album "unknown album)
c'est plus clair comme ca?

n°84874
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 17:28:34  profilanswer
 

je crois que je comprends.
en fait le piège c'est que un même nom d'album en l'occurence "unknow album" représente des albums différents non indentifiés.
Le seul moyen de différencier les pistes d'un album inconnu d'un autre c'est d'utiliser la clé étrangère de la piste correspondant à la clé  primaire de l'album.  
ce que je ferais en premier lieu c'est d'abord sélectionner toutes les pistes des albums "unknow album" group by album_id.
 
ensuite tu gardes tout sauf les pistes uniques par album_id (et non par album_name)
 
Dans ta requete finale (qui rassemblera les sous requetes précédentes) tu enlèves les doublons, avec select distinct patati patata ....
 
Tu vois ce que je veux dire ?
Je dis pas que c'est la solution, mais c'est comme ça que je le verrais moi.
 
Je vais essayer de tester ça et je te donnerais la requete si ça fonctionne ..

n°84876
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 17:47:53  profilanswer
 

Bon alors j'ai tester sous access (le premier truc que j'avais sous la main)
D'après ton dernier poste j'obtient la réponse avec ça :
 
SELECT pistes.band_id, pistes.song_name, Count(*) AS NB_doublons
FROM albums, pistes
WHERE pistes.album_id=albums.album_id
GROUP BY pistes.band_id, pistes.song_name
HAVING Count(*)>1;

 
Mais je crois que c'est pas ça que tu veux en fait. je crois qu'il y a un problème dans la conception même.
C'est quoi band_id ??
 
parce que si tu veux retrouver toutes les pistes doublons selon ces critères : band_id et song_name alors la requete c'est celle que je viens d'écrire.
 
mais je trouve ça étrange..  
Bref ;p

n°84880
drlobo
Posté le 29-12-2001 à 18:05:42  profilanswer
 

band_id c'est l'id du group qui a fait la chanson.
 
ta requete marche mais ne fais exactement ce que je veux.
si je rajoute cet exemple
 
album_id  Album_name  
  1        alb1  
  2        alb2  
  3     Unknown Album  
  4     Unknown Album    
  5        alb3
  6        alb4
 
song_id  band_id album_id song_name  
 1         1        1     nom1  
 2         1        2     nom1    
 3         1        3     nom1  
 5         2        4     nom2    
 6         2        4     nom2
 7         3        5     nom3
 8         3        6     nom3
 
la chanson nommé nom3 est bien en double,mais aucun de ces double est non classifié (cad n'appartient pas a un album nommé "unknown album" ) il ne faut donc pas que la chanson nom3 apparaise dans les resultats.
 
Je veux selectionner uniquement les chansons en double et dont l'un de ces doubles n'est pas classifié.Si il y a des doubles mais qu'aucun n'appartient a un album nommé "unknown album" ils ne doivent pas apparaitre dans le resultat.

n°84884
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 19:02:08  profilanswer
 

J'ai compris !! MIRACLE  :lol:

n°84885
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 19:06:56  profilanswer
 

T'aurais pas plus vite fait d'écrire une petite routine sous PHP j'imagine (vu qu'on est en MySQL) plutôt que de chercher à tout faire dans une requete ?
parce que en effet c'est un peu .. euh hardu ton probleme  :eek2:  
Mais je penche sur la question  :??:

n°84889
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 19:36:45  profilanswer
 

:pt1cable: désolé, mais je sèche, mes quelques neurones restants ne me permette pas d'atteindre un tel niveau intellectuel  :hap:  
Il faudrait demander à un pro du SQL qui aime se faire mal !
bref bon courage lol  :bounce:

mood
Publicité
Posté le 29-12-2001 à 19:36:45  profilanswer
 

n°84890
drlobo
Posté le 29-12-2001 à 19:38:57  profilanswer
 

ca doit etre faisable mais ca impliquerait plein de test et de sous requetes et j'ai peur que ca prenne trop de temps (j'ai plus 100 000 enregistrements dans la table song)

n°84891
tripanozom​a
Trypanosoma brucei gambiens
Posté le 29-12-2001 à 19:53:31  profilanswer
 

:non: dis dont, si je compte 15 pistes par CD ça fait 6666 Cds à 120 frs le Cd disons ça représente : 800 000 Francs soit encore 121959.21 ?uros.
6666 Cds que évidement tu as acheté  :D  
 :spookie: nan sans rire pour le temps de traitement je te conseille de faire ça avec du code PHP, tu sors une requete intermédiaire avec juste ce que tu as besoin puis tu traites tout dans un programme..
enfin sur le web, ça doit peser 100 000 enregistrements  
BYE BYE  :hello:

n°84892
drlobo
Posté le 29-12-2001 à 20:18:15  profilanswer
 

héhé :D  c'est pas la liste des mes mp3 c'est les paroles des chansons (cf signature)
en fait j'ai besoin de faire le ménage pour diminuer un peu le nombre d'enregistrement car comme tu dis ca prend de la place et la place ca coute cher!
 
en tout cas merci pour le coup de main :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [mysql] requete trop complexe pour moi

 

Sujets relatifs
[VB] Interpretation hasardeuse des dates à partir d'une requete SQL ?mysql impossible d'ajouter un nouveau commentaire
[MySQL] Prob avec Order by hits DESC[MySQL/PHP] utilisation de SHOW STATUS
[mysql] Recharger MySQL ??[php] pour verifié l existance d enregistrement ds une base mysql
[MySQL] select * : occupation processeur[PHP-MySQL-JS-HTML] -->> page a tester
[php mysql] faire un compteur mysql / clé unique / etc...embrouillé!tableau html et requete php/mysql
Plus de sujets relatifs à : [mysql] requete trop complexe pour moi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR