[Réglé] [résolu] [Extraire une valeur de la BDD] ...

Forum de développements privés.

Modérateur: Equipe

Règles du forum
A lire impérativement sur notre page : Règlement

[Réglé] [résolu] [Extraire une valeur de la BDD] ...

Messagepar Alcazarfr » 18 Sep 2004 à 14:06

(re -re -re) bonjour...

Ds tjrs le même mod, une des pages génére une liste de "parties". (extraite de la table TEST_PARTIE )

Tout marche très bien...
Code: Tout sélectionner
// Génération de la liste

$sql = "SELECT id, id_createur, nombre, nom
	FROM " . TEST_PARTIE_TABLE . "
	ORDER BY id ASC";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}

if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{
		$id = $row['id'];
		$id_createur = $row['id_createur'];
		$nombre = $row['nombre'];
		$nom = $row['nom'];

		$template->assign_block_vars('liste', array(
			'ID' => $id,
	 		'NOMBRE' => $nombre,
			'NOM' => $nom,
	 		'ID_CREATEUR' => $id_createur)
		);
		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}


La liste génere le nom des parties, et autres.

Or, j'aimerais surtout avoir le nom du créateur:


J'utilise donc:

Code: Tout sélectionner
$sql = "SELECT user_id, username
	FROM " . USERS_TABLE . "  
	WHERE user_id = $id_createur";


Ce qui donne:

Code: Tout sélectionner
// Génération de la liste

$sql = "SELECT id, id_createur, nombre, nom
	FROM " . MONOPOLY_PARTIE_TABLE . "
	ORDER BY id ASC";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}

if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{
		$id = $row['id'];
		$id_createur = $row['id_createur'];
		$nombre = $row['nombre'];
		$nom = $row['nom'];

$sql = "SELECT user_id, username
	FROM " . USERS_TABLE . "  
	WHERE user_id = $id_createur";


		$template->assign_block_vars('liste', array(
			'ID' => $id,
	 		'NOMBRE' => $nombre,
			'NOM' => $nom,
	 		'ID_CREATEUR' => $id_createur)
		);
		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}



Sauf que (après test...) je ne sais pas comment utiliser les valeurs username ...

Avez vous une solution?
Modifié en dernier par Alcazarfr le 18 Sep 2004 à 16:10, modifié 1 fois.
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Dr DLP » 18 Sep 2004 à 14:30

Remplace:
$sql = "SELECT id, id_createur, nombre, nom
FROM " . MONOPOLY_PARTIE_TABLE . "
ORDER BY id ASC";
par
Code: Tout sélectionner
$sql = "SELECT m.id, m.id_createur, m.nombre, m.nom , u.username
   FROM " . MONOPOLY_PARTIE_TABLE . " AS m , " . USERS_TABLE . "  AS u
   WHERE m.id = u.user_id
   ORDER BY id ASC"; 

et supprime:
Code: Tout sélectionner
$sql = "SELECT user_id, username 
   FROM " . USERS_TABLE . "  
   WHERE user_id = $id_createur";

Ca évite de faire un nombre élevé de requêtes, une seule suffit. Il faut éviter de mettre des requêtes SQL dans des boucles, ça bouffe trop, et c'est généralement possible de l'éviter.
Avec celle-là, tu as l'username en même temps que les autres champs.

Sinon, l'erreur dans ton code est que tout simplement tu fais la requête mais ne récupère aucune info...
Il aurait au moins fallu rajouter:
Code: Tout sélectionner
if( !($result = $db->sql_query($sql)) ) 
{ 
   message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql); 
} 
$name = $db->sql_fetchrow($result);
$username = $name['username'];
Avatar de l’utilisateur
Dr DLP
Floodeur universel
Floodeur universel
 
Messages: 8411
Enregistré le: 05 Mar 2003 à 23:49
Localisation: Var ( 83 )

Messagepar Alcazarfr » 18 Sep 2004 à 14:36

ok..

Merci, je vais l'optimiser... (ce que j'esperais faire...)

Il est vrai que je ne savais pas:

Code: Tout sélectionner
$name = $db->sql_fetchrow($result); 


(Je ne savais pas comment le taper...)


Je test... (et approuve)
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 18 Sep 2004 à 14:40

Dr DLP, il ne vaut mieux aps utiliser les jointures sur els tables pour être dans les normes SQL? j'avais lu ça sur un site comme quoi il fallait toujours utiliser le mot clé JOIN, non?
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Dr DLP » 18 Sep 2004 à 14:46

Dark_Genova a écrit:Dr DLP, il ne vaut mieux aps utiliser les jointures sur els tables pour être dans les normes SQL? j'avais lu ça sur un site comme quoi il fallait toujours utiliser le mot clé JOIN, non?

Seulement si le nombre d'entrées est différent dans les deux tables.
Mais tu as raison, je pense qu'il vaut mieux le faire systématiquement:
Code: Tout sélectionner
$sql = "SELECT m.id, m.id_createur, m.nombre, m.nom , u.username 
   FROM " . MONOPOLY_PARTIE_TABLE . " AS m 
   LEFT JOIN " . USERS_TABLE . "  AS u ON ( m.id = u.user_id )
   ORDER BY id ASC"; 
Avatar de l’utilisateur
Dr DLP
Floodeur universel
Floodeur universel
 
Messages: 8411
Enregistré le: 05 Mar 2003 à 23:49
Localisation: Var ( 83 )

Messagepar Alcazarfr » 18 Sep 2004 à 14:48

hummm...

J'ai donc ceci:

Code: Tout sélectionner
// Génération de la liste

$sql = "SELECT m.id, m.id_createur, m.nombre, m.nom, u.username
	FROM " . MONOPOLY_PARTIE_TABLE . " AS m, " . USERS_TABLE . " AS u
	WHERE m.id = u.user_id
	ORDER BY m.id ASC";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}

if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{
		$id = $row['id'];
		$id_createur = $row['id_createur'];
		$createur = $row['username'];
		$nombre = $row['nombre'];
		$nom = $row['nom'];

		$template->assign_block_vars('liste', array(
			'ID' => $id,
	 		'NOMBRE' => $nombre,
			'NOM' => $nom,
	 		'CREATEUR' => $createur,
	 		'ID_CREATEUR' => $id_createur)
		);
		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}


Le hic, c'est que la liste n'affiche plus que 2 parties (ayant 2 id_createur et createur) differentes...
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Alcazarfr » 18 Sep 2004 à 16:10

Ca y ai, j'ai trouvé...

(erreur petite, mais très importante, qui changeait TOUS!)

Code: Tout sélectionner
$sql = "SELECT m.id, m.id_createur, m.nombre, m.nom, m.mdp, u.username
	FROM " . MONOPOLY_PARTIE_TABLE . " m, " . USERS_TABLE . " u
	WHERE m.id_createur = u.user_id
	ORDER BY m.id ASC";

Il s'agit de:

Code: Tout sélectionner
 m.id_createur = u.user_id


Et j'avais avant:

Code: Tout sélectionner
 m.id = u.user_id


Ce qui changeait tous...


Merci!!!
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22


Retourner vers Développements privés

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité