bonjour,
voila j´ai un petit probleme, je vous ai fais ce schéma la :
http://img180.imageshack.us/img180/864/mareflexionqt9.png
en fait, le "listage" seras tiré de ma BDD, seulement je ne voudrais pas faire une requete pour chaque colonne, j´ai alors réfléchis pour faire comme il faut, mais j´y arrive pas.
Ma structure :
1 table : tuto
5 champs : id, auteur, categorie, titre, message.
Donc, par exemple par la categorie 1 du tableau, je mettrais categorie 1 dans mon champ categorie, la c´est pas le probleme, mais c´est pour le codage que j´ai du mal.
Eviter de faire plein de requete pour chaque colonne, voici mon enigme
voila merci ![]()
Effectivement, dans la table tu mets une catégorie ( 1, 2, 3 ... ) et tu affiche si cat = 1 alors t´affiche tous ceux ou c´est un elseif = 2 ... et ainsi de suite ![]()
http://sqlpro.developpez.com/cours/optimiser/
ok merci,
moi j´ai fais autrement et ca m´a l´air pas mal, je liste toutes mes infos, je fais (si categorie == ...) alors je rajoute une donnée dans un tableau qui correspond a la catégorie, ensuite a la fin j´affiche mes tableau dans les bonne cellule et c´est nikel ![]()
j´ai un probleme, comme j´utilise les tableaux et que je faire un lien pour chaque donnees que j´ai suivant son id, bin ca marche pas.
jai un WHILE qui enregsitre les infos de ma BDD dans un array auquel je rajoute une info a chaque fois (array_push), le probleme, c´est qu´il me faudrait son id, alors j´enregistre son id dans un autre tableau, mais au moment de l´afficher, bien mes 2 colonnes se confonde, ce qui fait que j´ai 2 id = 1 et ca va pas ...
http://www.geneweb.fr/wall-DCUVhfpU-php.htm
voila si vous pouviez encore m´aidez ![]()
bin non c´est bon, j´ai fait autrement, j´ai rajouté 2 requêtes pour avoir l´id appartenant aux donnee du tableau et ca fonctionne, sa me fait 3 requête en tout, je pense que c´est correct ![]()
Question : tes categories proviennent du bd ?
Si oui, 2 requetes suffisent, si non, une seul requete suffit
oui elle viennent de la bdd, tu peux m´expliquer comment ?
En fait, je fais tout bosser au max sur le serveur mysql moi :/
Je sais pas si c´est bien, mais en tout cas les résultats sont améliorés.
Genre pour un if, je le foux dans une clause mysql
personne ne saît si c´est nocif ? =E
WatzaKamikaze > loool, quand tu as un paquet de visiteurs...ça doit ramer lol
jacman >
- 1 requete pour selectionner tt les categories
- 1 requete pour selectionner ts les forums
Une boucle pour afficher tt les categories avec dedans :
- une boucle pour tous les forums si et ssi la categorie du forum == categoerie parcourue
Nan au contraire, parce que dans mon blog par ex y a que 2 requetes mysql en tout.
Bon ok c´est requêtes elles durent longtemps
Mais tout en un ![]()
Tu peux les montrer stp ![]()
hmm deepblue, mon truc fonctionne je vais le garder, de plus je fais pas un forum ![]()
mais le principe est le meme...
Je t´en montre une de la page index.. xP,
y en a que je préfère garder pour moi tellement elles sont bien
SELECT COUNT(co.id_post) as nb_commentaire,
nom_categorie,
p.id_post,
titre,
p.contenu,
DATE_FORMAT(p.date,´%e/%m/%Y <center>%k h %i</center>´) as date2,
nom_admin
FROM admin as a, categorie as c, post as p
LEFT OUTER JOIN commentaire as co
ON co.id_post = p.id_post
WHERE id_admin = id_posteur
AND c.id_categorie = p.id_categorie
GROUP BY p.id_post
ORDER BY p.id_post DESC
LIMIT $location,$nb_afficher
Au lieu de faire un count() à chaque fois, rajoute une colonne dans ta table des catégorie ( et update quand on ajoute )
C´est plus ´rapide´ vu qu´on affiche bien plus souvent la page qu´on n´ajoute des commentaires
Et ton limit, il est pas portable.
Le limit, selon la norme sql, ce n´est pas limit x, y mais limit y offset x
J´ai demandé aucun conseil.
Le fait est que je préfère avoir une table claire.
Et la jointure externe est tout autant rapide, surtout que j´utilise un index.
limit par portable et pas à la norme ?
je suis en isam alors je vois pas pourquoi je rajouterais des clauses pour rien. La norme MySQL ne le spécifie pas.
"Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset."
http://dev.mysql.com/doc/refman/5.0/fr/select.html
Si je voulais réellement optimiser ma requette je ferais des left joins au lieu de jointure interne.
Je vois pas le rapport ~~
Pourquoi tu parles de jointures internes?
Avec la ´méthode´ que j´ai décrite, pas besoin de jointure, c´est un champs comme les autres, et la table ne perds pas une once de clarté Oo
Et oui, ca fonctionne, j´ai pas dit le contraire, et oui, limit x, y est la syntaxe de base de MySQL, mais vois-tu, je préfère de loin suivre la syntaxe SQL qui assurera une plus grande compatibilité avec la plupart des sgbdr ( ou au pire, ca facilitera la migration )
Mais bien sur si tu te cantonnes à MySQL et que tu te fous de la portabilité de tes scripts, utilise donc ce que tu veux. Mais dans ce cas tu peux aussi utiliser <? ?> au lieu de <?php ?> , ou toute autre abréviation/norme peu protable qui fonctionne chez toi. ( et pour 5 caractère, y a pas quoi casser trois pattes à canard
( sans compter que c´ets plus logique de dire: "prend x ligne à partir de l´offset y" plutôt que de dire: "prend, à partir de l´offset y, x lignes" ) )
Et au fait, avant de parler d´optimiser ses requêtes, ne faudrait-il pas parler d´optimiser le modèle, les tables, les bases? Choisir les bons types de table, de champs, indexer comme il faut, toussa quoi :-°
( même si on demande pas de conseil, une critique, un commentaire, .. n´as jamais tué personne quand elle est argumentée et justifiée )
elle est ou la porte? :[
"Pourquoi tu parles de jointures internes? "
jointure interne < LEFT JOIN
"Et oui, ca fonctionne, j´ai pas dit le contraire, et oui, limit x, y est la syntaxe de base de MySQL, mais vois-tu, je préfère de loin suivre la syntaxe SQL qui assurera une plus grande compatibilité avec la plupart des sgbdr ( ou au pire, ca facilitera la migration ) "
Oui oui.
"Et au fait, avant de parler d´optimiser ses requêtes, ne faudrait-il pas parler d´optimiser le modèle, les tables, les bases? Choisir les bons types de table, de champs, indexer comme il faut, toussa quoi :-°"
Ouai mais ça je sais le faire.
Ah?
Bin tu sais quoi, en ajoutant une colonne qui contient le nombre de commentaire, ta jointure, elle disparait.
Juste par curiosité, tu sais me dire quelle est la différence entre ces deux requête ( une des deux est plus performante quel´autre, tu sais me dire laquelle et pourquoi? )
SELECT
t1.col1, t1.col2, t2.col1, t2.col2
FROM table1 t1, table2 t2
WHERE t1.col1 = t2.col1
SELECT
t1.col1, t1.col2, t2.col1, t2.col2
FROM table1 t1
LEFT JOIN table2 t2 ON t2.col1 = t1.col1
Ca devrait être facile pour toi vu que tu sais tout opimiser ![]()