Php:afficher résultat requête sql sans while
Résolu/Fermé
Alphatrion
Messages postés
12
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
17 février 2014
-
26 janv. 2010 à 19:13
Alphatrion Messages postés 12 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 17 février 2014 - 27 janv. 2010 à 18:09
Alphatrion Messages postés 12 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 17 février 2014 - 27 janv. 2010 à 18:09
A voir également:
- Php:afficher résultat requête sql sans while
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Br php ✓ - Forum PHP
- Expert php - Télécharger - Langages
- Php echo image ✓ - Forum PHP
11 réponses
zcrew
Messages postés
231
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
26 février 2010
25
27 janv. 2010 à 12:44
27 janv. 2010 à 12:44
Salut,
Avant tout remplace
$i=0
while ($i<11) do {
par
for ($i = 0 ; $i < 11 ; $i++)
c'est plus joli. Ensuite là tu affiches 11 lignes et non 10.
Après tu peux faire un truc comme
for ($i = 0 ; $i < 10 ; $i++)
{
if ( ($i%2) == 0) // Si $i est pair
{
$row_table1 = mysql_fetch_row(...) ;
echo $row_table1['contenu'] ;
}
else
{
$row_table2 = mysql_fetch_row(...) ;
echo $row_table2['contenu'] ;
}
}
Ca n'affichera que 5 lignes de chaque tableau, donc un total de 10 lignes
Avant tout remplace
$i=0
while ($i<11) do {
par
for ($i = 0 ; $i < 11 ; $i++)
c'est plus joli. Ensuite là tu affiches 11 lignes et non 10.
Après tu peux faire un truc comme
for ($i = 0 ; $i < 10 ; $i++)
{
if ( ($i%2) == 0) // Si $i est pair
{
$row_table1 = mysql_fetch_row(...) ;
echo $row_table1['contenu'] ;
}
else
{
$row_table2 = mysql_fetch_row(...) ;
echo $row_table2['contenu'] ;
}
}
Ca n'affichera que 5 lignes de chaque tableau, donc un total de 10 lignes
Ça ne va marcher que si tu es sûr d'avoir plus de valeurs que le nombre que tu veux afficher. Mais sur un système nouvellement installé, ou tu as peu de News et de Beer, erreur assurée...
Dans le programme que je t'ai proposé, je n'ai pas mis de limitation du nombre d'infos affichées. un petit $i=0 en initialisation, $i++; dans la boucle et une condition de plus dans le while devraient faire l'affaire
Dans le programme que je t'ai proposé, je n'ai pas mis de limitation du nombre d'infos affichées. un petit $i=0 en initialisation, $i++; dans la boucle et une condition de plus dans le while devraient faire l'affaire
Alphatrion
Messages postés
12
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
17 février 2014
10
27 janv. 2010 à 18:09
27 janv. 2010 à 18:09
En effet, dans ce cas là, ça aurait été problématique, mais là, le but n'est que d'afficher une dizaine d'enregistrements (cette page va générer un flux rss) et chacune des deux tables est beaucoup plus grande ;)
Du coup, ta solution aurait été bien pratique... Par contre, je pense qu'en faisant
$row_News = mysql_fetch_array($News, MYSQL_BOTH);
$row_Beer = mysql_fetch_array($Beer, MYSQL_BOTH);
dès le début, tu zappes les deux premiers enregistrements (c'est ce que j'avais fait au début)
en tout cas, ma solution marche bien donc c'est cool, merci pour ton temps
bonne soirée
Du coup, ta solution aurait été bien pratique... Par contre, je pense qu'en faisant
$row_News = mysql_fetch_array($News, MYSQL_BOTH);
$row_Beer = mysql_fetch_array($Beer, MYSQL_BOTH);
dès le début, tu zappes les deux premiers enregistrements (c'est ce que j'avais fait au début)
en tout cas, ma solution marche bien donc c'est cool, merci pour ton temps
bonne soirée
Archeus01
Messages postés
1571
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
9 juin 2022
451
27 janv. 2010 à 11:44
27 janv. 2010 à 11:44
Bonjour,
pourquoi tu ne met pas tout dans le même tableau et après tu tries avec une fonction php faite pour trier les tableaux avant de les afficher?
pourquoi tu ne met pas tout dans le même tableau et après tu tries avec une fonction php faite pour trier les tableaux avant de les afficher?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alphatrion
Messages postés
12
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
17 février 2014
10
27 janv. 2010 à 14:29
27 janv. 2010 à 14:29
Bonjour et merci de vos réponses
-> Archeus, le coup du tableau, ça me semble une bonne idée seulement je ne sais pas vraiment comment m'y prendre pour créer un trier un tel tableau. Je peux chercher mais je pense que ça ne marchera pas car mes deux tables n'ont en fait pas les mêmes colonnes. Quand j'ai écrit echo $row_table1['contenu']; c'était simplifié, j'affiche différentes colonnes à cet endroit...
-> Zcrew, je sais pas si c'est moi qui ne comprends pas ton code, mais il me semble que ça affiche une ligne sur deux pour chacune des tables, ce n'est pas ce que je recherche puisque je veux faire un tri sur la date.
Pour le if à la plus du while, tu as complètement raison, j'étais perdu dans mes idées, voilà ce que je pensais faire à la base (mes tables s'appellent News et Beer) :
$i=0;
$j=0;
do {
if ($row_News["date_post"] > $row_Beer["date_post"]) {
echo $row_News["titre"];
$i++;
//.. amener le pointeur sur le ième enregistrement de News
}
else {
echo $row_Beer["nom"];
$j++;
//.. amener le pointeur sur le jème enregistrement de Beer
}
} while ((i+j)<8) ;
Je pensais qu'il était possible de trouver une fonction qui face pointer sur l'enregistrement suivant (n° i ou j ici) mais je ne trouve pas... Si quelqu'un a eu idée, ou alors une solution entièrement différente, je reste preneur...
merci beaucoup
-> Archeus, le coup du tableau, ça me semble une bonne idée seulement je ne sais pas vraiment comment m'y prendre pour créer un trier un tel tableau. Je peux chercher mais je pense que ça ne marchera pas car mes deux tables n'ont en fait pas les mêmes colonnes. Quand j'ai écrit echo $row_table1['contenu']; c'était simplifié, j'affiche différentes colonnes à cet endroit...
-> Zcrew, je sais pas si c'est moi qui ne comprends pas ton code, mais il me semble que ça affiche une ligne sur deux pour chacune des tables, ce n'est pas ce que je recherche puisque je veux faire un tri sur la date.
Pour le if à la plus du while, tu as complètement raison, j'étais perdu dans mes idées, voilà ce que je pensais faire à la base (mes tables s'appellent News et Beer) :
$i=0;
$j=0;
do {
if ($row_News["date_post"] > $row_Beer["date_post"]) {
echo $row_News["titre"];
$i++;
//.. amener le pointeur sur le ième enregistrement de News
}
else {
echo $row_Beer["nom"];
$j++;
//.. amener le pointeur sur le jème enregistrement de Beer
}
} while ((i+j)<8) ;
Je pensais qu'il était possible de trouver une fonction qui face pointer sur l'enregistrement suivant (n° i ou j ici) mais je ne trouve pas... Si quelqu'un a eu idée, ou alors une solution entièrement différente, je reste preneur...
merci beaucoup
Bonjour
Je pensais qu'il était possible de trouver une fonction qui face pointer sur l'enregistrement suivant
Cette fonction existe, c'est mysql_fetch_array(). Elle sert très exactement à ça !
Mais je pense que tu vas avoir un autre problème, c'est de gérer qu'une des deux listes est épuisée avant L'autre. Tu peux t'en sortir de deux manières, l'une d'elles est de forcer une valeur bidon (très grand ou très petite, à toi d'y réfléchir...) quand une des listes de réponses est épuisée (mysqlèfetch_array te rend false)
Je pensais qu'il était possible de trouver une fonction qui face pointer sur l'enregistrement suivant
Cette fonction existe, c'est mysql_fetch_array(). Elle sert très exactement à ça !
Mais je pense que tu vas avoir un autre problème, c'est de gérer qu'une des deux listes est épuisée avant L'autre. Tu peux t'en sortir de deux manières, l'une d'elles est de forcer une valeur bidon (très grand ou très petite, à toi d'y réfléchir...) quand une des listes de réponses est épuisée (mysqlèfetch_array te rend false)
Alphatrion
Messages postés
12
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
17 février 2014
10
27 janv. 2010 à 15:19
27 janv. 2010 à 15:19
Ok, merci le père, l'espoir renait...
j'ai lu un peu la doc sur mysql_fetch_array et je n'ai apparemment pas compris exactement comme s'en servir puisque tout ce que j'ai réussi à faire, c'est planter mon navigateur :-s
De ce que j'ai compris (arrêtez moi si je me trompe), ce n'est pas la peine de lui donner mon entier $j ou $i : il incrémente tout seul à la ligne suivante ?
et cette fonction retourne un tableau que je stock et interroge ensuite...
voici mon code pour le moment (et qui ne marche pas, j'ai laissé les i et j et le while pour que ça ressemble à l'exemple au dessus, mais je peux à priori avoir juste un i et un if comme conseillé par zcrew... :
do {
if ($row_News["date_post"] > $row_Beer["date_post"]) {
$row = mysql_fetch_array($News, MYSQL_BOTH);
echo $row["titre"];
$i++;
}
else {
$row = mysql_fetch_array($Beer, MYSQL_BOTH);
echo $row["nom"];
$j++;
}
} while ((i+j)<9) ;
où est mon erreur ??!
Sinon, pas de problème prévu d'épuisement de liste ;) : je ne veux afficher qu'une dizaine d'enregistrement en tout, donc mes requetes sql récupèrent 10 enregistrement dans chaque liste, et j'affiche uniquement les 10 plus récentes parmi ces 20...
merci
j'ai lu un peu la doc sur mysql_fetch_array et je n'ai apparemment pas compris exactement comme s'en servir puisque tout ce que j'ai réussi à faire, c'est planter mon navigateur :-s
De ce que j'ai compris (arrêtez moi si je me trompe), ce n'est pas la peine de lui donner mon entier $j ou $i : il incrémente tout seul à la ligne suivante ?
et cette fonction retourne un tableau que je stock et interroge ensuite...
voici mon code pour le moment (et qui ne marche pas, j'ai laissé les i et j et le while pour que ça ressemble à l'exemple au dessus, mais je peux à priori avoir juste un i et un if comme conseillé par zcrew... :
do {
if ($row_News["date_post"] > $row_Beer["date_post"]) {
$row = mysql_fetch_array($News, MYSQL_BOTH);
echo $row["titre"];
$i++;
}
else {
$row = mysql_fetch_array($Beer, MYSQL_BOTH);
echo $row["nom"];
$j++;
}
} while ((i+j)<9) ;
où est mon erreur ??!
Sinon, pas de problème prévu d'épuisement de liste ;) : je ne veux afficher qu'une dizaine d'enregistrement en tout, donc mes requetes sql récupèrent 10 enregistrement dans chaque liste, et j'affiche uniquement les 10 plus récentes parmi ces 20...
merci
ça manque de logique...
tu compares $row_News[..] et $row_Beer[..]
mais quand tu passes à l'enregistrement suivant tu appelles tout le monde $row !
De plus, tu fais le 'echo' après être passé à l'enregistrement suivant alors qu'il faudrait le faire avant
Et comme je l'ai déjà évoqié dans ton message précédent, une de tes listes va s'épuiser avant l'autre. Dans ce cas, mysql_fetch_array va te rendre FALSE, donc l'un de tes $row ne sera plus un tableau et donc $row_News["date_post"] ou $row_Beer ["date_post"] ne voudront plus rien dire, pas question de faire une comparaison avec.
Je me penche un peu plus en détail et je re-poste
tu compares $row_News[..] et $row_Beer[..]
mais quand tu passes à l'enregistrement suivant tu appelles tout le monde $row !
De plus, tu fais le 'echo' après être passé à l'enregistrement suivant alors qu'il faudrait le faire avant
Et comme je l'ai déjà évoqié dans ton message précédent, une de tes listes va s'épuiser avant l'autre. Dans ce cas, mysql_fetch_array va te rendre FALSE, donc l'un de tes $row ne sera plus un tableau et donc $row_News["date_post"] ou $row_Beer ["date_post"] ne voudront plus rien dire, pas question de faire une comparaison avec.
Je me penche un peu plus en détail et je re-poste
Je ne sais pas si c'est volontairement que tu affiches le champ "titre" pour une de tes requêtes et le champ "nom" pour l'autre, mais j'ai respecté.
Je n'ai pas testé. Et ça suppose que tes deux requêtes trient déjà les dates dans le bon ordre !
<?php // initialisation avant balayage $row_News = mysql_fetch_array($News, MYSQL_BOTH); $row_Beer = mysql_fetch_array($Beer, MYSQL_BOTH); $NewsPasFini=($row_News !== false); $BeerPasFini=($row_Beer !== false); while ( $NewsPasFini || $BeerPasFini)) { // prise de décision $AfficherNews=False; if ($NewsPasFini && $BeerPasFini) { // si les 2 listes pas finies if ($row_News["date_post"] > $row_Beer["date_post"]) AfficherNews=True; } else if ($NewsPasFini) $AfficherNews=True; // s'il ne reste que des news // affichage if ($AfficherNews) { echo $row_News["titre"]; $row_News = mysql_fetch_array($News, MYSQL_BOTH); $NewsPasFini=($row_News !== false); } else { echo $row_Beer["nom"]; $row_Beer = mysql_fetch_array($Beer, MYSQL_BOTH); $BeerPasFini=($row_Beer !== false); } } // while ?>
Je n'ai pas testé. Et ça suppose que tes deux requêtes trient déjà les dates dans le bon ordre !
ça commence bien...
une parenthèse de trop à droite de $BeerPasFini
while ( $NewsPasFini || $BeerPasFini) {
une parenthèse de trop à droite de $BeerPasFini
while ( $NewsPasFini || $BeerPasFini) {
Alphatrion
Messages postés
12
Date d'inscription
mardi 5 mai 2009
Statut
Membre
Dernière intervention
17 février 2014
10
27 janv. 2010 à 17:25
27 janv. 2010 à 17:25
En effet, j'avais du oublier mon cerveau tout à l'heure (d'ailleurs ce ne sont pas mes tables qui s'appellent News et Beer mais les résultats de ma requete)...
J'ai changé deux trois trucs et ça a l'air de bien marcher... je vais quand même regarder ton code le père et voir s'il faut que je change des trucs
voici mon code qui a l'air de marcher :
$row_beer=$row_Beer;
$row_news=$row_News;
for ($i = 0 ; $i < 10 ; $i++) {
if ($row_news["date_post"] > $row_beer["date_post"]) {
echo row_news["titre"];
$row_news = mysql_fetch_array($News, MYSQL_BOTH);
}
else {
echo row_beer["nom"];
$row_beer = mysql_fetch_array($Beer, MYSQL_BOTH);
}
} ;
je vais essayer de réimplanter ça avec tous les affichages et fonction à la place du echo simple en espérant que ça reste ok... je vous tiens au jus
merci bien à tous et sur au père !
J'ai changé deux trois trucs et ça a l'air de bien marcher... je vais quand même regarder ton code le père et voir s'il faut que je change des trucs
voici mon code qui a l'air de marcher :
$row_beer=$row_Beer;
$row_news=$row_News;
for ($i = 0 ; $i < 10 ; $i++) {
if ($row_news["date_post"] > $row_beer["date_post"]) {
echo row_news["titre"];
$row_news = mysql_fetch_array($News, MYSQL_BOTH);
}
else {
echo row_beer["nom"];
$row_beer = mysql_fetch_array($Beer, MYSQL_BOTH);
}
} ;
je vais essayer de réimplanter ça avec tous les affichages et fonction à la place du echo simple en espérant que ça reste ok... je vous tiens au jus
merci bien à tous et sur au père !