[mysql] requete trop complexe pour moi

requete trop complexe pour moi [mysql] - Programmation

Marsh Posté le 29-12-2001 à 12:44:04    

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"

Reply

Marsh Posté le 29-12-2001 à 12:44:04   

Reply

Marsh Posté le 29-12-2001 à 12:57:37    

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 ?

Reply

Marsh Posté le 29-12-2001 à 13:24:07    

:lol:


---------------
Dezintoxikation
Reply

Marsh Posté le 29-12-2001 à 13:31:50    

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?

Reply

Marsh Posté le 29-12-2001 à 17:28:34    

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

Reply

Marsh Posté le 29-12-2001 à 17:47:53    

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

Reply

Marsh Posté le 29-12-2001 à 18:05:42    

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.

Reply

Marsh Posté le 29-12-2001 à 19:02:08    

J'ai compris !! MIRACLE  :lol:

Reply

Marsh Posté le 29-12-2001 à 19:06:56    

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

Reply

Marsh Posté le 29-12-2001 à 19:36:45    

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

Reply

Marsh Posté le 29-12-2001 à 19:36:45   

Reply

Marsh Posté le 29-12-2001 à 19:38:57    

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)

Reply

Marsh Posté le 29-12-2001 à 19:53:31    

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

Reply

Marsh Posté le 29-12-2001 à 20:18:15    

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:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed