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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[PHP/mySQL] conseils d'optimisation

n°1160280
Onesque
Derelict Otter
Posté le 26-07-2005 à 14:29:16  profilanswer
 

Reprise du message précédent :
Vi, merci. J'ai copié collé ca d'une page ou j'ai pas encore fait cette modif, mais on m'avait déjà fait la remarque :D

mood
Publicité
Posté le 26-07-2005 à 14:29:16  profilanswer
 

n°1160312
mrbebert
Posté le 26-07-2005 à 14:43:23  profilanswer
 

micfont999 a écrit :

Voui effectivement vu sous cet angle... :) enfin ne nous éloignons pas trop du sujet :D

Oui, recentrons :o  
 
Quelques "optimisations" MySQL (mais généralisables aux autres SGBD), basées sur une idée : demander à MySQL directement l'information qui nous intéresse plutôt que transférer inutilement trop de données vers PHP :)  
 
- les colonnes
Si vous avez 10 colonnes dans votre table mais n'en voulez que 2, ne demander que ces 2 colonnes.
SELECT champ_1, champ_2 From table1
 
- les lignes
Idem, en utilisant WHERE pour enlever les lignes dont on n'a pas besoin
SELECT * from table1 WHERE champ_1 = 5
 
Le HAVING à un fonctionnement un peu similaire au WHERE à une différence près : il est exécuté à la fin de la requête, juste avant le transfert. C'est pratique pour supprimer des lignes sans pouvoir le faire avec un WHERE.
Par exemple, on à une table avec des lignes de facture (prix de l'article, quantité et identifiant de la facture), on veut le total de chaque facture, mais seulement celles dont le montant total est supérieur à 1000. On ne peut pas déterminer ce montant en traitant chaque ligne individuellement, donc le WHERE ne sera pas utile.
SELECT id_facture, SUM(prix * quantite) AS total_facture FROM lignes_factures GROUP BY id_facture HAVING total_factures >= 1000
 
- les tris
Autant les faire directement en MySQL si c'est possible
SELECT champ_1, champ_2 From table1 ORDER BY champ_1 ASC
 
- le comptage
Vous voulez savoir le nombre de lignes qui respectent une condition dans une table.
1ère solution : SELECT champ_1 FROM table_1 WHERE champ_1 = 5 puis utilisation de mysql_num_rows() pour connaître le nombre de lignes du résultat.
Là, MySQL va transférer toutes les lignes vers PHP, qui va les mémoriser. Tout ca, juste pour savoir combien il y en a.
 
2ème solution : SELECT COUNT(champ_1) AS nb_lignes FROM table_1 WHERE champ_1 = 5
Là, le résultat ne contient qu'1 ligne et 1 colonne. C'est quand même moins volumineux, non :)  
 
(bon, si vous voulez aussi parcourir le résultat, mieux vaut la 1ère méthode puisque vous aurrez de toute façon besoin de récupérer toutes les lignes)
 
- utilisation du LIMIT
Le LIMIT indique que l'on souhaite récupérer seulement une partie du résultat. Par exemple, en ajoutant LIMIT 10,25 à la fin de votre requête MySQL ne transférera que 25 lignes, en commencant à la 10ème.
 
Pratique, lorsqu'il est combiné avec un tri, lorque l'on veut afficher des données sur plusieurs pages, pour déterminer un "top n", récupérer les 10 données les plus vieilles/récentes...

n°1160358
nero27
Posté le 26-07-2005 à 15:03:41  profilanswer
 

Merci mrbebert : je copie/colle car c'est bien expliqué ;)
 
En parlant de limit, n'est-il pas préférable d'ajouter limit 0,1 au bout d'une requête dont on sait qu'il n'y a qu'un seul résultat possible ?


Message édité par nero27 le 26-07-2005 à 15:07:39
n°1160382
sielfried
Posté le 26-07-2005 à 15:22:21  profilanswer
 

mrbebert a écrit :

Oui, recentrons :o  
- le comptage
Vous voulez savoir le nombre de lignes qui respectent une condition dans une table.
1ère solution : SELECT champ_1 FROM table_1 WHERE champ_1 = 5 puis utilisation de mysql_num_rows() pour connaître le nombre de lignes du résultat.
Là, MySQL va transférer toutes les lignes vers PHP, qui va les mémoriser. Tout ca, juste pour savoir combien il y en a.
 
2ème solution : SELECT COUNT(champ_1) AS nb_lignes FROM table_1 WHERE champ_1 = 5
Là, le résultat ne contient qu'1 ligne et 1 colonne. C'est quand même moins volumineux, non :)  


 
A noter que la première solution est cela dit meilleure si on a aussi besoin des lignes en elles-memes, même si ça peut sembler évident.
 
Mon petit ajout à moi : utiliser mysql_fetch_assoc au lieu de mysql_fetch_array quand y'a pas besoin d'accéder aux colonnes par indices numériques (seulement par clé associative). C'est presque aussi rapide qu'un mysql_fetch_row.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1160388
nero27
Posté le 26-07-2005 à 15:25:04  profilanswer
 

Ah, c'est pas bete ca.
Et est-ce que quelqu'un connait le rapport de performances entre mysql_fetch_row, mysql_fetch_array et mysql_fetch_assoc ? ou un site qui en parle ?

n°1160394
esox_ch
Posté le 26-07-2005 à 15:26:30  profilanswer
 

Du point de vue de ce que tu veux faire toi, un fetch_accoc est bien assez rapide.. Pas besoin de se faire une branlette intellectuelle pour sortir 5 lignes de 5 champs sorties d'une table


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1160396
mrbebert
Posté le 26-07-2005 à 15:27:10  profilanswer
 

sielfried a écrit :

A noter que la première solution est cela dit meilleure si on a aussi besoin des lignes en elles-memes, même si ça peut sembler évident.
 
Mon petit ajout à moi : utiliser mysql_fetch_assoc au lieu de mysql_fetch_array quand y'a pas besoin d'accéder aux colonnes par indices numériques (seulement par clé associative). C'est presque aussi rapide qu'un mysql_fetch_row.

Ca peut sembler évident, mais je l'ai quand même précisé :whistle:  
 
 

nero27 a écrit :

Merci mrbebert : je copie/colle car c'est bien expliqué ;)
 
En parlant de limit, n'est-il pas préférable d'ajouter limit 0,1 au bout d'une requête dont on sait qu'il n'y a qu'un seul résultat possible ?

Oui, ca permet d'indiquer à MySQL d'arrêter la recherche dès qu'il a trouvé ce qu'on voulait :)

n°1160399
sielfried
Posté le 26-07-2005 à 15:28:11  profilanswer
 

mrbebert a écrit :

Ca peut sembler évident, mais je l'ai quand même précisé :whistle:  


 
C'est ça d'être un feignant de la lecture. :(


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1160402
sielfried
Posté le 26-07-2005 à 15:30:34  profilanswer
 

nero27 a écrit :

Ah, c'est pas bete ca.
Et est-ce que quelqu'un connait le rapport de performances entre mysql_fetch_row, mysql_fetch_array et mysql_fetch_assoc ? ou un site qui en parle ?


 
Commentaire trouvé sur php.net :
 
Benchmark on a table with 38567 rows:
 
mysql_fetch_array
MYSQL_BOTH: 6.01940000057 secs
MYSQL_NUM: 3.22173595428 secs  
MYSQL_ASSOC: 3.92950594425 secs  
 
mysql_fetch_row: 2.35096800327 secs  
mysql_fetch_assoc: 2.92349803448 secs  
 
As you can see, it's twice as effecient to fetch either an array or a hash, rather than getting both.  it's even faster to use fetch_row rather than passing fetch_array MYSQL_NUM, or fetch_assoc rather than fetch_array MYSQL_ASSOC.  Don't fetch BOTH unless you really need them, and most of the time you don't.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1160405
sielfried
Posté le 26-07-2005 à 15:31:34  profilanswer
 

Sachant bien sûr que le mysql_fetch_array utilise MYSQL_BOTH par défaut.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 26-07-2005 à 15:31:34  profilanswer
 

n°1160420
micfont999
Simplement Moi
Posté le 26-07-2005 à 15:36:36  profilanswer
 

Décidément je fait tout à l'envers moi, j'utilise fetch_array :(
 
Sinon est ce que toutes ces optimisations font qu'un gros gros site peu accueillir plus de visiteurs ou bien c'est juste au niveau de la rapidité des scripts s'il y à beaucoup de monde par exemple??  

n°1160451
mrbebert
Posté le 26-07-2005 à 15:51:07  profilanswer
 

Oui. Si les scripts sont plus rapides, le serveur pourra en traiter plus avant de saturer [:proy]  
Une requête plus rapide sollicite moins le proc, les disques, et libère plus rapidement l'accès aux données.
 

sielfried a écrit :

C'est ça d'être un feignant de la lecture. :(

Un bon informaticien, c'est feignant :o  
D'ailleurs, on passe notre temps à essayer de reporter un max de boulot sur les ordinateurs :D


Message édité par mrbebert le 26-07-2005 à 15:54:51
n°1160475
micfont999
Simplement Moi
Posté le 26-07-2005 à 16:04:09  profilanswer
 

mrbebert a écrit :

Oui. Si les scripts sont plus rapides, le serveur pourra en traiter plus avant de saturer [:proy]  
Une requête plus rapide sollicite moins le proc, les disques, et libère plus rapidement l'accès aux données.


 
Ok merci beaucoup, je me coucherais moins bete ce soir et maintenant je vais essayer de faire mes script au mieux :)
 

mrbebert a écrit :


Un bon informaticien, c'est feignant :o  
D'ailleurs, on passe notre temps à essayer de reporter un max de boulot sur les ordinateurs :D


 
 :jap:  :jap: vivement les procos hyper puissant et les disques durs ultra gros qu'ont puissent faire des scripts tout moches et tout lents sans avoir de problèmes  :lol:  :lol:  :whistle: (non non je rigole :D )
 
 [:magnasuprema]

n°1160476
nero27
Posté le 26-07-2005 à 16:04:38  profilanswer
 

mrbebert a écrit :

Oui, ca permet d'indiquer à MySQL d'arrêter la recherche dès qu'il a trouvé ce qu'on voulait :)


Merci bcp : je vais donc rajouté ceci aux nombreuses requêtes du site le nécessitant ;)

n°1161260
nero27
Posté le 27-07-2005 à 11:25:11  profilanswer
 

D'autres conseils d'optimisation ?

n°1161521
Ricco
Retour au pays
Posté le 27-07-2005 à 14:21:21  profilanswer
 

Là le truc qui me vient à l'esprit c'est de faire plutôt un grosse et élégante requete SQL plutôt qu'une moche ou plein de petites qui rebouclent avec du php .... Mais c le genre d'horreur que je suis le seul à faire lors de moment de dérive :D
Sinon un truc sympa dont je devrait surement me servir plus, un petit UPDATE table SET count = count+1 WHERE index_column=constant, au lieu d'un select, du calcul php puis d'un insert :)
 
D'autres trucs là http://sunsite.mff.cuni.cz/MIRRORS [...] ation.html


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1161550
cinocks
Posté le 27-07-2005 à 14:38:01  profilanswer
 

mrbebert a écrit :

Oui, recentrons :o  
...
Le HAVING à un fonctionnement un peu similaire au WHERE à une différence près : il est exécuté à la fin de la requête, juste avant le transfert. C'est pratique pour supprimer des lignes sans pouvoir le faire avec un WHERE.
Par exemple, on à une table avec des lignes de facture (prix de l'article, quantité et identifiant de la facture), on veut le total de chaque facture, mais seulement celles dont le montant total est supérieur à 1000. On ne peut pas déterminer ce montant en traitant chaque ligne individuellement, donc le WHERE ne sera pas utile.
SELECT id_facture, SUM(prix * quantite) AS total_facture FROM lignes_factures GROUP BY id_facture HAVING total_factures >= 1000
 
Petite precision le HAVING est une selection apres aggregat. C'est à dire, qu'il permet de trier les regroupements obtenus.
 
...
 
- le comptage
Vous voulez savoir le nombre de lignes qui respectent une condition dans une table.
1ère solution : SELECT champ_1 FROM table_1 WHERE champ_1 = 5 puis utilisation de mysql_num_rows() pour connaître le nombre de lignes du résultat.
Là, MySQL va transférer toutes les lignes vers PHP, qui va les mémoriser. Tout ca, juste pour savoir combien il y en a.
 
2ème solution : SELECT COUNT(champ_1) AS nb_lignes FROM table_1 WHERE champ_1 = 5
Là, le résultat ne contient qu'1 ligne et 1 colonne. C'est quand même moins volumineux, non :)  
 
C'est meme indispensable comme methode pour faire un compte. Ca n'a aucun interet de rapatrier des enregistrements rien que pour un comptage. Ceci dit, ca doit se configurer au niveau de PHP la methode de rapatriement des données: tout d'un coup, par page...
 
(bon, si vous voulez aussi parcourir le résultat, mieux vaut la 1ère méthode puisque vous aurrez de toute façon besoin de récupérer toutes les lignes)
 
- utilisation du LIMIT
Le LIMIT indique que l'on souhaite récupérer seulement une partie du résultat. Par exemple, en ajoutant LIMIT 10,25 à la fin de votre requête MySQL ne transférera que 25 lignes, en commencant à la 10ème.
 
Faire attention au LIMIT. Ne pas s'en servir pour isoler les 25 lignes à partir de la ligne 100000, par exemple. Car il va falloir qu'il genere les 99999 premieres lignes avant de retourner les 25 suivantes. C'est tres couteux!!! Donc l'utiliser avec la main legere.
 
Pratique, lorsqu'il est combiné avec un tri, lorque l'on veut afficher des données sur plusieurs pages, pour déterminer un "top n", récupérer les 10 données les plus vieilles/récentes...



---------------
MZP est de retour
n°1162488
laaaaaapin
ouai §
Posté le 28-07-2005 à 02:41:45  profilanswer
 

cinocks a écrit :

Faire attention au LIMIT. Ne pas s'en servir pour isoler les 25 lignes à partir de la ligne 100000, par exemple. Car il va falloir qu'il genere les 99999 premieres lignes avant de retourner les 25 suivantes. C'est tres couteux!!! Donc l'utiliser avec la main legere.


Mais alors dans ce cas-là, tu fais comment pour lister les 25 lignes à partir de la ligne 100 000 ? Tu te sers de l'id de la ligne (en admettant qu'elle a un champ id...) et tu prends les 25 premières à partir de la ligne ayant le 100 000ème id ?
Je sais pas si je suis très clair...


---------------
www.TASOEUR.biz / "Le lundi au soleil, c'est une chose qu'on n'aura jamais." - Claude François.
n°1162508
esox_ch
Posté le 28-07-2005 à 06:44:26  profilanswer
 

ORBER BY ID DESC LIMIT 25 p-e [:spamafote]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1162528
cinocks
Posté le 28-07-2005 à 08:31:33  profilanswer
 

laaaaaapin a écrit :

Mais alors dans ce cas-là, tu fais comment pour lister les 25 lignes à partir de la ligne 100 000 ? Tu te sers de l'id de la ligne (en admettant qu'elle a un champ id...) et tu prends les 25 premières à partir de la ligne ayant le 100 000ème id ?
Je sais pas si je suis très clair...


 
tout depend de l'usage. Sur le forum que je developpe, je stocke la position d'un message dans son sujet. Je prefere faire une selection avec un WHERE pos>=100000 and pos <100025.


---------------
MZP est de retour
n°1163131
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 14:51:00  profilanswer
 

Comment fais-tu pour connaitre les IDs ? ça t'oblige à faire un Select avant non ?

n°1163707
Ricco
Retour au pays
Posté le 28-07-2005 à 17:47:00  profilanswer
 

Ca oblige à avoir un champ pos dans la table c'est tout :)


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1163712
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 17:50:41  profilanswer
 

ça veut dire recomptage à chaque message effacé.
Cela dit, comme sur un forum on efface pas 15 messages par minute, ce n'est pas bête, j'y penserais pour mon prochain forum.

n°1163719
cinocks
Posté le 28-07-2005 à 17:56:14  profilanswer
 

non ca veut dire decrement de 1 par message d'id superieur à celui supprimé(ou masqué). C'est correct sur la suppression se  fait sur un message recent. Par contre, c'est tres long pour un tres vieux message, car il va fair une grosse mise à jour.


---------------
MZP est de retour
n°1163722
laaaaaapin
ouai §
Posté le 28-07-2005 à 17:58:57  profilanswer
 

C'est bien ce que je pensais.


---------------
www.TASOEUR.biz / "Le lundi au soleil, c'est une chose qu'on n'aura jamais." - Claude François.
n°1163723
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 17:59:43  profilanswer
 

Ouai, c'est ça que j'entendais par recomptage.
Mais je trouve quand même l'idée bonne.
La seul option qui doit faire souffrir à mort la base de données, c'est le massdelete sur un membre par exemple.

n°1163729
cinocks
Posté le 28-07-2005 à 18:03:33  profilanswer
 

je n'ai pas encore implementé le mass delete. Mais il doit etre jouable de la faire plus finement en passant par une table de travail. Et ne faire qu'une seule requete de maj.
 
Mais effectivement, ca consomme des ressources. Perso, je vais le gerer en batch, hisstoire de ne pas bloquer le site.


---------------
MZP est de retour
n°1163738
esox_ch
Posté le 28-07-2005 à 18:16:24  profilanswer
 

Si j'etais vous je ferais ça en 2 fois. Quand on delete le topic, ca fous un flag particulier, et apres une fois par jour, la nuit, on lock les tables pendant quelques secondes et tout les messages avec le flag sont jartés, et la table compactée... Parceque sinon je vous le met dans le mille qu'il va y avoir des probleme d'acces pendant que vous deplacés vos 500'000 colonnes


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1163963
Ricco
Retour au pays
Posté le 28-07-2005 à 21:40:49  profilanswer
 

C'est vrai que je n'avais pas pensé aux messages effacés ...  
Ca m'etonnerais que la reindexations soit une bonne solution, surtout que ça surcharge les index interne. Si on le fait en direct, la base prends un coup à chaque message effacé. Si on le fait en batch, il y a un laps de temps pendant lequel la page ne contiendra pas le bon nombre de messages.
Finalement, je me demande si le LIMIT est si mauvais que ça, le sgbd doit être surement optimisé pour sauter les x premiers enregistrements sans trop de peine.


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1163971
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 21:42:32  profilanswer
 

Faudrais demander à Joce comment il fait, parce que sur HFR, y'a des sacré gros sujets. :D

n°1163976
esox_ch
Posté le 28-07-2005 à 21:44:31  profilanswer
 

Perso sur mon forum j'avais tout simplement un systeme de flag qui passaient a -1 pour effacer, et le contenu du message etait vider pour gagner un peu de place ... Apres ... reindexer le tout .. J'ai jamais essayé... faudrait demander a Arjuna ou aux autres DBA ce qu'ils en pensent


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1165294
drasche
Posté le 29-07-2005 à 22:32:01  profilanswer
 

nero27 a écrit :

Ah, c'est pas bete ca.
Et est-ce que quelqu'un connait le rapport de performances entre mysql_fetch_row, mysql_fetch_array et mysql_fetch_assoc ? ou un site qui en parle ?


je dirais mysql_fetch_row < mysql_fetch_assoc < mysql_fetch_array < mysql_fetch_object (pas sûr à 100% pour ce dernier)
 
Perso j'utilise que mysql_fetch_row et mysql_fetch_assoc.
 

micfont999 a écrit :

Décidément je fait tout à l'envers moi, j'utilise fetch_array :(
 
Sinon est ce que toutes ces optimisations font qu'un gros gros site peu accueillir plus de visiteurs ou bien c'est juste au niveau de la rapidité des scripts s'il y à beaucoup de monde par exemple??


la rapidité d'exécution est améliorée et aide, mais vraiment un tout petit peu, à améliorer la charge. Ce qui charge vraiment, c'est les appels à la DB eux-mêmes.
 

laaaaaapin a écrit :

Mais alors dans ce cas-là, tu fais comment pour lister les 25 lignes à partir de la ligne 100 000 ? Tu te sers de l'id de la ligne (en admettant qu'elle a un champ id...) et tu prends les 25 premières à partir de la ligne ayant le 100 000ème id ?
Je sais pas si je suis très clair...


en principe c'est LIMIT 100000, 25
 
Mais ça force la lecture des 100000 premiers enregistrements trouvés, donc t'as intérêt à plutôt trouver une méthode pour tomber directement dessus. Si les 25 sont les derniers, lis les à l'envers, car les remettre à l'endroit par après sera beaucoup moins coûteuse en traitement.
 

cinocks a écrit :

tout depend de l'usage. Sur le forum que je developpe, je stocke la position d'un message dans son sujet. Je prefere faire une selection avec un WHERE pos>=100000 and pos <100025.


comme moi :D (on en avait beaucoup discuté sur le topic Forums de ce problème :D)
 
un peu contraignant mais bon :o
 

The-Shadow a écrit :

Ouai, c'est ça que j'entendais par recomptage.
Mais je trouve quand même l'idée bonne.
La seul option qui doit faire souffrir à mort la base de données, c'est le massdelete sur un membre par exemple.


C'est super lourd à gérer, c'est le gros inconvénient de la méthode :o
mieux vaut se livrer à cet exercice pendant une maintenance :o
(en passant par la création de tables temporaires)
 
Si le mass delete n'est pas indispensable, mieux vaut virer le compte utilisateur et faire une mise à jour de ses messages comme c'est le cas maintenant ici. Son pseudo associé sera "utilisateur effacé", un truc du genre.
 

Ricco a écrit :

C'est vrai que je n'avais pas pensé aux messages effacés ...  
Ca m'etonnerais que la reindexations soit une bonne solution, surtout que ça surcharge les index interne. Si on le fait en direct, la base prends un coup à chaque message effacé. Si on le fait en batch, il y a un laps de temps pendant lequel la page ne contiendra pas le bon nombre de messages.
Finalement, je me demande si le LIMIT est si mauvais que ça, le sgbd doit être surement optimisé pour sauter les x premiers enregistrements sans trop de peine.


Une astuce comme on le disait plus haut, c'est qu'en début de topic, tu fais un LIMIT 0, 40 par exemple, et en fin de topic, tu fais un LIMIT 0, 40 ORDER <champ> DESC, histoire de minimiser le nombre d'enregistrements parcourus, à charge pour ton script de remettre ça en ordre ;)
 
Mais c'est les deux cas courants. Faut encore pouvoir gérer la lecture au milieu d'un gros topic. Ici, ça marche bien, mais Joce ne donnera pas sa recette :/


Message édité par drasche le 29-07-2005 à 22:32:42

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1165355
anthomicro
Posté le 30-07-2005 à 01:27:33  profilanswer
 

Salut,
 

Citation :

Parcontre les betch sur le site je les trouve un peu foireux ... genre le fgets qui lit les 255 premiers caracteres ... J'veux bien mais je connais peu de cas ou tu peux t'en servir sans un filesize()


 
ça peut arriver, t'es pas forcément obligé de boucler, bref pour te montrer que ça ne change rien j'ai rajouté le cas utilisant un filesize :-)
 
"Ou le file qui retourne pas le meme type que le file_get_contents"
 
On s'en fout le but est d'ouvrir un fichier (d'où le sous titre du graphique)... Après tu utilises chaque fonction en fonction de tes besoins, mais j'ai expliqué pour UN seul besoin (l'ouverture d'un fichier comme ça, sans utilisation de tableaux ou traitements particuliers). Il est certain qu'il vaut mieux utiliser la fonction file() si c'est pour boucler sur le tableau généré ensuite plutôt que de passer par file_get_contents suivi d'un explode pour foutre tout ça dans un tableau, je pense que t'as compris où je voulais en venir...
 
"Ah, et aussi le switch VS if/elseif qui est pas vraiment significatif sur 2 cas"
 
Bah tu voulais que je fasse quoi ? remplir la condition de code n'a aucun sens !
 
Pour le mysql_fetch_row() je le rajouterai à l'occas ;-)
 
a ++
 
EDIT : pour la recette de Joce c'est surement un BETWEEN ou un WHERE mais avec de toute façon un champ id pour pouvoir ne pas utiliser de LIMIT


Message édité par anthomicro le 30-07-2005 à 01:35:35
n°1199660
jerkeve
Posté le 14-09-2005 à 19:00:22  profilanswer
 

drapal, excellent topic :)  
puisse-t-il faire 80 pages !

n°1251796
fabs2b
Posté le 23-11-2005 à 19:18:57  profilanswer
 

Pour l'histoire du limit, si je comprend bien il vaut mieux borner avec des variables :
 

Code :
  1. $sql = 'SELECT .........LIMIT 10,15'


Devient  

Code :
  1. $sql = 'SELECT ....... WHERE id >14 and id <26';


 
Est bien ca ? ca me semble pas logique mais bon .....  :pfff:

n°1251828
mrbebert
Posté le 23-11-2005 à 20:05:39  profilanswer
 

C'est pas forcément la même chose ;)  
 
Si ta colonne "id" est indexée, la 2ème solution est la meilleure :)  
Mais ce n'est pas toujours possible de l'utiliser (par exemple, s'il y a des "trous" dans les valeurs de l'id).

n°1252008
art_dupond
je suis neuneu... oui oui !!
Posté le 24-11-2005 à 02:41:44  profilanswer
 

y a aussi ce topic de Sh@rdar de quand vous n'étiez pas encore nés :p
 
http://forum.hardware.fr/hardwaref [...] 9259-1.htm


Message édité par art_dupond le 24-11-2005 à 02:47:55
n°1252159
omega2
Posté le 24-11-2005 à 11:57:51  profilanswer
 

fabs2b a écrit :

Pour l'histoire du limit, si je comprend bien il vaut mieux borner avec des variables :
 

Code :
  1. $sql = 'SELECT .........LIMIT 10,15'


Devient  

Code :
  1. $sql = 'SELECT ....... WHERE id >14 and id <26';


 
Est bien ca ? ca me semble pas logique mais bon .....  :pfff:


Si tu n'as aucun trou dans la colone id, aucune autre condition dans le where et que la requette est trié par "id", ca pourait être la même chôse (bien que "WHERE id >9 and id <26' " correspondrait mieux à l'exemple) mais rare sont les cas où on est sur à 100% que ca sera le cas pendant toute la durée de vie du script ou du programme utilisant cette table. Ce n'est donc pas toujours utilisable

n°1252173
cinocks
Posté le 24-11-2005 à 12:10:33  profilanswer
 

<25 même. on en prend 15 à partir du 10 inclus :o :D
 


---------------
MZP est de retour
n°1252943
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 09:59:09  profilanswer
 

http://forum-images.hardware.fr/themes_static/images/telecharger%20com/multipleflag1.gif  [:dawa]
 
Ce topic va m'intéresser, parce que je fais un forum, mais dès qu'on est à plusieurs online qu'est ce qu'il rame [:pingouino]
Et ca vient pas du server...
 
J'ai une petite question, j'ai une requete dans une boucle, cay mal non? :/
Mais je ne peux pas faire autrement... dans ce cas là je dois faire quoi? revoir la structure de mes tables? ou alors il n'y a pas une technique avec des jointures mysql ou autre? je ne sais pas vraiment l'utiliser...


---------------
Feaks Forum
n°1252961
cinocks
Posté le 25-11-2005 à 10:11:14  profilanswer
 

que fais ta boucles? a quoi servent les requetes dedans?


---------------
MZP est de retour
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Modifier un fichier PDF avec PHPAide pour amelioration script PHP
[prog PHP][resolu] Faire un PHP qui archive un siteStructure base de données MySQL : correcte ou pas ?
[PHP] Utiliser un framework MVC ?[PHP] Récupérer l'url de la page cible protégée?
PHP dans Java Scriptphp et mysql
[Apache/PHP/MySQL] Newbie - Pb de connecxion distante (en local: OK) 
Plus de sujets relatifs à : [PHP/mySQL] conseils d'optimisation


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