Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/03/2011, 11h54   #1
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 1
Points : 1
Par défaut Problème d'imbrications de requetes

Bonjour,

Ça fait 2 jours que je bloque sur une requête et je commence sérieusement à saturer

Voici la structure de ma base
Code :
1
2
3
4
5
6
7
8
9
10
11
 
    videos   |  categories_lignes    | categories
-----------------------------------------------------
 id             id                      id
 url            categorie               nom
 time           video                   lang
 date_publi                             accueil
 site
 titre 
 vue 
 active


categories_lignes.categorie = categories.id
categories_lignes.video = videos.id

Ce que je cherche à faire, c'est de récupérer des vidéos différentes sur les catégories ayant comme valeur 'accueil=1'.
Chaque vidéo ayant plusieurs catégories possible.
La vidéo unique à affiché est la dernière en date donc trié avec 'date_publi' le tout trié par nom de catégorie


Actuellement le seul résultat que j'ai réussi à obtenir est l'affichage en double de certaines vidéos
1) avec une requête bien sale qui boucle sur une autre requête( oui je sais sa crains).
2) avec une imbrication de SELECT et de INNER JOIN

J'espère que vous avez compris car pour moi, mon idée est assez clair mais est assez difficile à expliquer.

En vous remerciant
_andro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 12h15   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
ça n'a pas l'air compliqué pourtant. Je suis pas sur pour mon v.* mais j'ai la flème de ne pas l'utiliser mais c'est suffisant pour l'exemple ... si tu n'as besoin que du premier ya LIMIT.
Code :
1
2
3
4
5
6
7
 
SELECT DISTINCT v.*
FROM categorie AS c 
 INNER JOIN categories_lignes AS cl ON c.id = cl.categorie 
 INNER JOIN videos AS v ON v.id = cl.video
WHERE c.accueil=:accueil  
ORDER BY v.date_publi DESC
edit: pas d'étoile dans du code !
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 13h35   #3
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 1
Points : 1
ce type de requête de marche pas il me retourne plusieurs fois la même vidéos et si j'utilise un GROUP BY sur les id.video je retombes sur la même catégorie mais la les vidéos sont différentes

et en faisant un GROUP BY par catégories, je retombe bien sûr encore sur 2 vidéos identiques

et enfin si je test un double GROUP BY (cf si dessous) j'ai une erreur "MySQL server has gone away"

Code :
1
2
3
4
5
6
7
8
9
 
SELECT DISTINCT (v.id),v.url,c.nom
FROM categories AS c 
 INNER JOIN categories_lignes AS cl ON c.id = cl.categorie 
 INNER JOIN videos AS v ON v.id = cl.video
WHERE c.accueil=1
GROUP BY c.id,v.id
ORDER BY v.date_publi DESC
LIMIT 10
PS: j'ai que 10 catégories présentes sur l'accueil je sais pas si sa peux être utile
_andro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 13h46   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
je suis assez tranquille que si tu utilises DISTINCT ma requête fonctionne, je vais faire un essai.

le probleme "server gone away" est un probleme tier du requetage, c'est que ton serveur s'est éteint ou a fermé les connexions.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 20h35   #5
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 1
Points : 1
Bon je vais finir par plus avoir de cheveux -_-' , j'arrive pas à trouver d'où vient le pb.

dernière requête en date un double DISTINCT (je sais pas si ça s'appel comme ça)

Code :
1
2
3
4
5
6
7
8
 
SELECT DISTINCT (v.id AND c.id),v.id AS vid_id,c.id AS cat_id
FROM categories AS c 
 INNER JOIN categories_lignes AS cl ON c.id = cl.categorie 
 INNER JOIN videos AS v ON v.id = cl.video
WHERE c.accueil=1
ORDER BY v.date_publi DESC
LIMIT 10
Si je rajoute un GROUP BY v.id j'ai 2 catégories identiques
Si je rajoute un GROUP BY c.id j'ai 2 vidéos identiques
_andro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 18h39   #6
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 1
Points : 1
Je me permet de faire un petit up car la je suis complètement bloqué il me reste plus que cette page à faire contenant la fameuse requête.

Je pense que le DISTINCT ne sert a rien car chaque vidéo et catégories sont est unique.
Si je le fait un GROUP BY sur les catégories ou sur les vidéos je me retrouve avec la même vidéo dans 2 voir trois catégories et inversement les vidéos uniques avec 2-3 fois la même catégorie.

C'est donc pour cela que je parlais de requêtes imbriqués, mais je ne vois pas comment faire si qq'un à une piste à me donner je suis preneur.

merci
_andro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 09h54   #7
Invité de passage
 
Inscription : mars 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 5
Points : 1
Points : 1
Ok requete qui marche si sa peut servir a qq'un ds le future par contre elle est pas optimisé

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT t2.*
FROM( 
SELECT t1.* 
FROM(
SELECT v.id AS vid_id,c.* FROM videos v
INNER JOIN categories_lignes cl ON cl.video=v.id
INNER JOIN categories c ON c.id=cl.categorie
WHERE c.accueil=1
ORDER BY v.date_publi
) t1
GROUP BY t1.vid_id
)t2
GROUP BY t2.id
_andro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h47.


 
 
 
 
Partenaires

Hébergement Web