Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

resultat mysql_query dans un tableau 2 dimensions

16 réponses
Avatar
Olivier Masson
Bonjour,

comment faire pour obtenir le résultat d'une requête MySQL sous forme
d'un tableau à 2 dimensions ?

Actuellement, je fais mon $a=mysql_query puis un mysql_fetch_row($a) (ou
array ou object) mais j'obtiens le résultat ligne par ligne.

Or je voulais savoir si chaque appel à ce fetch faisait une requête
MySQL où si c'était un traitement interne à PHP et, d'autre part, s'il
n'y avait pas un moyen d'obtenir, comme je le disais au début, un
tableau à 2 dimensions [nom_du_champ][ligne] comportant tout le résultat.

Merci.

10 réponses

1 2
Avatar
CrazyCat
Olivier Masson wrote:
Bonjour,

comment faire pour obtenir le résultat d'une requête MySQL sous forme
d'un tableau à 2 dimensions ?
Or je voulais savoir si chaque appel à ce fetch faisait une requête
MySQL où si c'était un traitement interne à PHP et, d'autre part, s'il
n'y avait pas un moyen d'obtenir, comme je le disais au début, un
tableau à 2 dimensions [nom_du_champ][ligne] comportant tout le résultat.


Je vois très facilement l'inverse, à savoir [ligne][champ]:
$ton_tableau[] = mysql_fetch_row($requete);



--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
loufoque
Olivier Masson a dit le 01/03/2005 à 13:15:

comment faire pour obtenir le résultat d'une requête MySQL sous forme
d'un tableau à 2 dimensions ?


Quel est l'intérêt, à part prendre inutilement de la place en mémoire ?
Comme une requête peut fournir une grande quantité de lignes, il vaut
mieux traiter ligne par ligne et de faire quelquechose de progressif,
pour éviter de tout mettre en mémoire d'un coup (d'autant plus que la
plupart des SGBD bufferisent déjà par défaut).
Après bon c'est vrai que si il y a peu de lignes (moins de 30) et que
les données sont courtes, ça ne gêne pas vraiment.

Le mieux est sûrement d'utiliser un itérateur, si on dispose de php5.

Avatar
Olivier Masson
Olivier Masson wrote:

Bonjour,

comment faire pour obtenir le résultat d'une requête MySQL sous forme
d'un tableau à 2 dimensions ?
Or je voulais savoir si chaque appel à ce fetch faisait une requête
MySQL où si c'était un traitement interne à PHP et, d'autre part, s'il
n'y avait pas un moyen d'obtenir, comme je le disais au début, un
tableau à 2 dimensions [nom_du_champ][ligne] comportant tout le résultat.



Je vois très facilement l'inverse, à savoir [ligne][champ]:
$ton_tableau[] = mysql_fetch_row($requete);





Comme avant, ça ne me donne que la ligne 0 :
Array ( [0] => Array ( [0] => 2001-09-09 [1] => Benjamin43 [2] => b [3]
=> m [4] => 92510 ) )


Avatar
Olivier Masson
Olivier Masson a dit le 01/03/2005 à 13:15:

comment faire pour obtenir le résultat d'une requête MySQL sous forme
d'un tableau à 2 dimensions ?



Quel est l'intérêt, à part prendre inutilement de la place en mémoire ?
Comme une requête peut fournir une grande quantité de lignes, il vaut
mieux traiter ligne par ligne et de faire quelquechose de progressif,
pour éviter de tout mettre en mémoire d'un coup (d'autant plus que la
plupart des SGBD bufferisent déjà par défaut).
Après bon c'est vrai que si il y a peu de lignes (moins de 30) et que
les données sont courtes, ça ne gêne pas vraiment.

Le mieux est sûrement d'utiliser un itérateur, si on dispose de php5.


En fait je les prends justement 30 par 30 dans la base (j'affiche un
tableau de résultats).
Mais déjà, est-ce tout simplement possible de récupérer l'intégralité du
résultats en une requête php -> mysql ?


Avatar
loufoque
loufoque a dit le 01/03/2005 à 15:50:

il vaut
mieux traiter ligne par ligne et de faire quelquechose de progressif,


Errata:
[...] et faire quelquechose [...]


Sinon, pour faire ce que vous souhaitez, c'est extremement simple.
$array = array();
while($row = mysql_fetch_array($req))
{
$array[] = $row;
}

Avatar
CrazyCat
Olivier Masson wrote:

Je vois très facilement l'inverse, à savoir [ligne][champ]:
$ton_tableau[] = mysql_fetch_row($requete);
Comme avant, ça ne me donne que la ligne 0 :

Array ( [0] => Array ( [0] => 2001-09-09 [1] => Benjamin43 [2] => b [3]
=> m [4] => 92510 ) )


Oui, effectivement, j'ai zappé une étape...
Essaye donc:
for ($i=0; $i<mysql_num_rows($requete); $i++) {
$ton_tableau[] = mysql_fetch_row($requete);
}

Et la, tu devrais obtenir ce qu'il faut alors que dans le cas précédent,
tu n'avais que la première ligne (je pensais que tu comprendrais que ça
devait s'insérer dans une boucle de lecture).

@++

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net


Avatar
loufoque
Le Chat Fou a dit :

Essaye donc:
for ($i=0; $i<mysql_num_rows($requete); $i++) {
$ton_tableau[] = mysql_fetch_row($requete);
}


On a pas vraiment besoin de mysql_num_rows pour réaliser une itération,
mysql_fetch_row renverra false quand il n'y a plus de résultat.
En plus, ici, mysql_num_rows est appelée à chaque itération.

Avatar
Olivier Masson
loufoque a dit le 01/03/2005 à 15:50:

il vaut mieux traiter ligne par ligne et de faire quelquechose de
progressif,



Errata:
[...] et faire quelquechose [...]


Sinon, pour faire ce que vous souhaitez, c'est extremement simple.
$array = array();
while($row = mysql_fetch_array($req))
{
$array[] = $row;
}


Vous m'avez mal compris : je sais faire une boucle :o)
Ce que je souhaitais savoir c'est si c'était possible en une seule commande.
Donc votre réponse implicite est non.


Avatar
CrazyCat
loufoque wrote:
On a pas vraiment besoin de mysql_num_rows pour réaliser une itération,
mysql_fetch_row renverra false quand il n'y a plus de résultat.
En plus, ici, mysql_num_rows est appelée à chaque itération.


Oui, effectivement, mais j'ai vite fait ça et sans réfléchir.
Mais bon, on s'est compris: le principe était bon: remplir une ligne du
tableau pour chaque ligne renvoyée par la requète.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
loufoque
Olivier Masson a dit le 01/03/2005 à 23:07:

Vous m'avez mal compris : je sais faire une boucle :o)
Ce que je souhaitais savoir c'est si c'était possible en une seule
commande.


C'est quoi une commande ? Une fonction native du pilote ?
De toutes façons c'est un pilote client, qui discute avec le serveur via
socket. Il envoie des lignes et en récupère, c'est tout.
Après que ce soit le code C ou le code PHP qui génère le tableau à deux
dimensions, je ne pense pas que ça change grand chose.

Donc votre réponse implicite est non.


Effectivement, une telle fonction n'existe pas.

1 2