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

 


Dernière réponse
Sujet : [PHP] Problème avec un WHILE :(
Max Evans Oki, v essayer de faire comme ca :)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Max Evans Oki, v essayer de faire comme ca :)
skylight

CREATE TABLE forum_forums (
  id_forum tinyint(2) unsigned NOT NULL auto_increment,
  groupe tinyint(2) unsigned NOT NULL default '0',
  forum varchar(100) NOT NULL default '',
  comment varchar(200) NOT NULL default '',
  password varchar(50) NOT NULL default '',
  nbtopics mediumint(7) unsigned NOT NULL default '0',
  nbtopicsreels mediumint(7) unsigned NOT NULL default '0',
  nbtopics_suppr mediumint(7) unsigned NOT NULL default '0',
  nbposts mediumint(10) unsigned NOT NULL default '0',
  visible tinyint(1) unsigned NOT NULL default '0',
  ordre tinyint(2) unsigned NOT NULL default '0',
  annonce varchar(255) NOT NULL default '',
  dateheure int(11) unsigned NOT NULL default '0',
  lastposteur varchar(50) NOT NULL default '',
  id_lastposteur mediumint(7) unsigned NOT NULL default '0',
  last_post mediumint(10) unsigned NOT NULL default '0',
  last_topic mediumint(7) unsigned NOT NULL default '0',
  last_page mediumint(4) unsigned NOT NULL default '0',
  moderateurs varchar(255) NOT NULL default '',
  level tinyint(2) unsigned NOT NULL default '0',
  level_grp tinyint(1) unsigned NOT NULL default '1',
  afficher_ip tinyint(1) unsigned NOT NULL default '1',
  alert_modo tinyint(1) unsigned NOT NULL default '1',
  avatars tinyint(1) unsigned NOT NULL default '1',
  citation tinyint(1) unsigned NOT NULL default '1',
  signatures tinyint(1) unsigned NOT NULL default '1',
  img_in_posts tinyint(1) unsigned NOT NULL default '1',
  bloquage tinyint(1) unsigned NOT NULL default '0',
  PRIMARY KEY  (id_forum),
  KEY ordre (ordre),
  KEY visible (visible),
  KEY groupe (groupe)
) TYPE=MyISAM;


 
:D

skylight oué l'ancien :D (ptin kes ke c crade :lol:)
 
bon deja il serait bcp + simple que tu recopie les champs dateheure et lastauteur dans forum_categories
 
d'une part ca eviterai une jointure, (qui est tjs + lourd et + lent) et donc ca allege le serveur
 
d'autres part tu as tout en 1 requete ...
 
pour la page principale, mon vrairum ne fait que 2 requetes pour tout avoir (posts, config ...)
Max Evans C en gros les memes que celle de ton forum :)
 
CREATE TABLE forum_categories (
  id tinyint(4) NOT NULL auto_increment,
  idforum tinyint(4) NOT NULL default '0',
  nom varchar(50) NOT NULL default '',
  totaltopics smallint(4) NOT NULL default '0',
  totalposts smallint(4) NOT NULL default '0',
  modérateur varchar(50) NOT NULL default '',
  description varchar(255) NOT NULL default '',
  KEY id (id)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `forum_topics`
#
 
CREATE TABLE forum_topics (
  topic int(11) unsigned NOT NULL auto_increment,
  idforum tinyint(4) NOT NULL default '0',
  categorie tinyint(4) NOT NULL default '0',
  icone int(11) default '1',
  titre varchar(100) NOT NULL default '0',
  auteur varchar(50) NOT NULL default '0',
  replys int(11) unsigned NOT NULL default '0',
  views int(11) unsigned NOT NULL default '0',
  dateheure datetime NOT NULL default '0000-00-00 00:00:00',
  lastauteur varchar(50) NOT NULL default '0',
  close tinyint(5) NOT NULL default '0',
  PRIMARY KEY  (topic)
) TYPE=MyISAM;
skylight fais voir la structure de tes tables alors
Max Evans Nop, ca marche po, ca m'affiche a chaque fois 4 fois le nom de la categorie :(
Max Evans merchi sky, v tester :)
skylight

Code :
  1. $sql = "SELECT A.*,B.dateheure,B.lastauteur FROM forum_categories as A LEFT JOIN forums_topics as B ON (B.idforum = A.idforum AND B.categorie = '$id') WHERE A.idforum='$id'"; 
  2.   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  3.   while ($data = mysql_fetch_array($req)) {
  4. }


a tester, je pense que ca devrai etre bon ceci dit, j'ai pas testé

Max Evans

youdontcare a écrit a écrit :

tu n'as qu'à faire une jointure (une gauche je crois). tu auras l'id du forum, dateheure et lastposteur tous rangés dans le même tableau, id restant identique tant que tu es dans le même forum (voilà pour la détection des différents forum).
 
cherche left join (ou les join en général si c'est pas ça :D).  




 
Oki, v aller me renseigner, merchi :)

Max Evans

kayasax a écrit a écrit :

:??:
 
ta requete est comme ca:
 $sql = "SELECT * FROM forum_categories WHERE idforum='$id'";  
donc si je suis pas trop con normalement idforum est unique => le resultat de ta requete ne renvoi donc qu'une ligne  




 
Je me suis peut mal exprimé :)
En gros, en fonction du nombre d'enregistrement dans le champ, y aura le meme nombre de lignes au tablo.
 
Par exemple, ya 6 categories, y aura 6 lignes au tableau :)  [:veryfree]

youdontcare tu n'as qu'à faire une jointure (une gauche je crois). tu auras l'id du forum, dateheure et lastposteur tous rangés dans le même tableau, id restant identique tant que tu es dans le même forum (voilà pour la détection des différents forum).
 
cherche left join (ou les join en général si c'est pas ça :D).
Max Evans J'ai aussi testé :
 

Code :
  1. $sql = "SELECT * FROM forum_categories WHERE idforum='$id'"; 
  2.   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  3.   while ($data = mysql_fetch_array($req)) 
  4.      $sql2 = "SELECT dateheure, lastauteur FROM forum_topics WHERE idforum='$id'  AND categorie='$data[id]' ORDER BY dateheure DESC"; 
  5.     $req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
  6.     $data2 = mysql_fetch_array($req2);
  7. {


 
Et :
 

Code :
  1. $sql = "SELECT * FROM forum_categories WHERE idforum='$id'"; 
  2. $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  3. $data3 = mysql_fetch_array($req)
  4. while ($data = mysql_fetch_array($req)) 
  5. {
  6. $sql2 = "SELECT dateheure, lastauteur FROM forum_topics WHERE idforum='$id'  AND categorie='$data3[id]' ORDER BY dateheure DESC"; 
  7. $req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
  8. $data2 = mysql_fetch_array($req2);


 
Aucun ne marche :(

kayasax :??:
 
ta requete est comme ca:
 $sql = "SELECT * FROM forum_categories WHERE idforum='$id'";  
donc si je suis pas trop con normalement idforum est unique => le resultat de ta requete ne renvoi donc qu'une ligne
Max Evans Hello  :hello:  
 
Justement non, je suis obligé de faire un WHILE, car apres c un tableau qui est généré :(
kayasax si le resultat de ta 1ere requete ne renvoie qu'une seule ligne tu n'est pas oblige de faire un while, tu mets directos $data = mysql_fetch_array($req);
Max Evans Hello a tous  :hello:  
 
Voila, g un probleme, je suis en train de faire un forum, et je suis coincé :)
 
Voila le code :
 

Code :
  1. $sql = "SELECT * FROM forum_categories WHERE idforum='$id'";
  2. $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  3. while ($data = mysql_fetch_array($req))
  4. {
  5. $sql2 = "SELECT dateheure, lastauteur FROM forum_topics WHERE idforum='$id'  AND categorie='$data[id]' ORDER BY dateheure DESC";
  6. $req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
  7. $data2 = mysql_fetch_array($req2);


 
Comme vous pouvez le constater, la 2° requete est dans la boucle WHILE, ce qui a pour consequence de ralentir considérablement l'affichage :(
 
A votre avis, je peux trouver l'id de la categorie (categorie='$data[id]') sans mettre la 2° requete ds le WHILE ?
 
Je vous remercie :)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)