Cherche a optimiser une requette MySQL SVP
7 messages
• Page 1 sur 1
- WEBCodeur
- WRInaute discret

- Messages: 116
- Inscription: 13 Mai 2007
Cherche a optimiser une requette MySQL SVP
Bonjour a tous,
J'ai deux tables qui ne sont pas identiques mais qui ont des champs en commun. Plus précisément les champs qui m’intéressent sont photo1 qui représentent le nom des photos stockées dans un dossier.
Je souhaite selectionner les 6 dernieres entrées de chacune des tables de ce champs et les affichées aléatoirement.
Les jointures conviendraient t'elles?
Merci d'avance !
J'ai deux tables qui ne sont pas identiques mais qui ont des champs en commun. Plus précisément les champs qui m’intéressent sont photo1 qui représentent le nom des photos stockées dans un dossier.
Je souhaite selectionner les 6 dernieres entrées de chacune des tables de ce champs et les affichées aléatoirement.
Les jointures conviendraient t'elles?
Merci d'avance !
-

Djibou_Te@M - WRInaute occasionnel

- Messages: 426
- Inscription: 20 Avr 2010
Re: Cherche a optimiser une requette MySQL SVP
Une jointure sert si il y a un point d'entrée commun entre les deux tables du style je cherche le champ photo 1 fait par "nom de l'auteur" sur mes deux tables. Ici "nom de l'auteur" est la référence commune entre tes deux tables donc jointure.
Pour ce que tu veux faire, tu fais deux requêtes :
"SELECT champ_photo1 FROM table_X ORDER BY id_table DESC (0,6)"
Ou table_X est le nom de ta table 1 ou table 2
id_table est l'id de la table (qui te donne aussi un ordre d'insertion)
"DESC" sert à les classer de manière décroissante (pour avoir les dernières en premier)
(0,6) pour dire que tu en veux que 6
Pour ce que tu veux faire, tu fais deux requêtes :
"SELECT champ_photo1 FROM table_X ORDER BY id_table DESC (0,6)"
Ou table_X est le nom de ta table 1 ou table 2
id_table est l'id de la table (qui te donne aussi un ordre d'insertion)
"DESC" sert à les classer de manière décroissante (pour avoir les dernières en premier)
(0,6) pour dire que tu en veux que 6
- WEBCodeur
- WRInaute discret

- Messages: 116
- Inscription: 13 Mai 2007
Re: Cherche a optimiser une requette MySQL SVP
Tout a fait, ca rejoint bien mes lectures.
Mais pour l'affichage des 12 en aleatoire ca se complique.
J'ai tenté un
$check_all = $bdd->query('SELECT photo1 FROM boys, girls ORDER BY RAND() LIMIT 0,12');
Ca me retourne un SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'photo1' in field list is ambiguous in
Hors si pour les test en local je remplace photo1 par *, je n'ai plus d'erreur ...
Merci a toi.
Mais pour l'affichage des 12 en aleatoire ca se complique.
J'ai tenté un
$check_all = $bdd->query('SELECT photo1 FROM boys, girls ORDER BY RAND() LIMIT 0,12');
Ca me retourne un SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'photo1' in field list is ambiguous in
Hors si pour les test en local je remplace photo1 par *, je n'ai plus d'erreur ...
Merci a toi.
-

blman - WRInaute accro

- Messages: 3077
- Inscription: 5 Sep 2003
Re: Cherche a optimiser une requette MySQL SVP
J'irais personnellement voir du côté de UNION ( http://dev.mysql.com/doc/refman/5.0/en/union.html )
Si tu n'a pas le choix de le faire en 1 seule requête, un truc du genre devrait sélectionner les photos des 12 dernières entrées (pas 6 et 6, mais les 12) :
(SELECT photo1, dateEntree FROM boys) UNION (SELECT photo1, dateEntree FROM girls) ORDER BY dateEntree DESC LIMIT 12;
Ensuite les classer aléatoirement quand tu traite ta requête.
Sinon, je rejoins Djibou_Te@M, je ne vois pas d'autres manières que de le faire en 2 requêtes SQL. Le problème est que tu aurais dû regrouper les infos communes aux 2 tables dans une 3ème table, ça t'aurait faciliter la vie
Si tu n'a pas le choix de le faire en 1 seule requête, un truc du genre devrait sélectionner les photos des 12 dernières entrées (pas 6 et 6, mais les 12) :
(SELECT photo1, dateEntree FROM boys) UNION (SELECT photo1, dateEntree FROM girls) ORDER BY dateEntree DESC LIMIT 12;
Ensuite les classer aléatoirement quand tu traite ta requête.
Sinon, je rejoins Djibou_Te@M, je ne vois pas d'autres manières que de le faire en 2 requêtes SQL. Le problème est que tu aurais dû regrouper les infos communes aux 2 tables dans une 3ème table, ça t'aurait faciliter la vie
- WEBCodeur
- WRInaute discret

- Messages: 116
- Inscription: 13 Mai 2007
[résolu] Cherche a optimiser une requette MySQL SVP
Yes, super 
Merci pour ce tuyau, je connaissait pas encore UNION mais j'vais faire un malheur avec
!!!
Voici ce que ca donne en PDO :
Un tit while et le tour est joué.
Le client m'a ajouter sans cesse des trucs a ajouter ce qui a mis un peu mon organisation de BDD a mal. J'organiserai ca mieux la prochaine fois.
Merci bcp en tout les cas!!!
Merci pour ce tuyau, je connaissait pas encore UNION mais j'vais faire un malheur avec
Voici ce que ca donne en PDO :
- Code: Tout sélectionner
$check_all = $bdd->query('SELECT pseudo, photo1 FROM girls UNION SELECT pseudo, photo1 FROM boys ORDER BY RAND() LIMIT 0,12');
Un tit while et le tour est joué.
Le client m'a ajouter sans cesse des trucs a ajouter ce qui a mis un peu mon organisation de BDD a mal. J'organiserai ca mieux la prochaine fois.
Merci bcp en tout les cas!!!
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Probleme requette mysql - Help SVP ! [Résolu]
- generateur de requette mysql
- requette supprimer les doublons mysql
- [Réglé]Requette MySql avec date
- Aide avec une requette Mysql
- [Résolu] Requette Mysql : Top de la semaine
- Comment faire cette requette mysql
- MySQL : Requette des timestamp dans les 7 prochains jours
- Comment optimiser google SVP
- Optimiser mysql
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités
