Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/05/2011, 07h36   #1
Invité de passage
 
Inscription : octobre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 16
Points : 3
Points : 3
Par défaut une requete avec jointure gauche

Bonjour,

j'essayé de modifier une requete servant dans phpbb3.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$sql_ary = array(
			'SELECT'	=> 'u.user_id, u.user_colour, u.username, u.user_type',
			'FROM'		=> array(USERS_TABLE => 'u'),
			'LEFT_JOIN'	=> array(
				array(
					'FROM'	=> array(SESSIONS_TABLE => 's'),
					'ON'	=> 's.session_user_id = u.user_id',
				),
			),
			'WHERE'		=> 'u.user_lastvisit > ' . (time() - 86400) . ' OR s.session_user_id <> ' . ANONYMOUS,
			'GROUP_BY'	=> 'u.user_id',
			'ORDER_BY'	=> 'u.username',
		);
 
		$result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
Je voudrai ajouter une condition pour ne pas lister le nom des bots qui ont un group_id à 6. J'ai essayé celle ci mais ça ne fonctionne pas.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$sql_ary = array(
			'SELECT'	=> 'u.user_id, u.user_colour, u.username, u.user_type',
			'FROM'		=> array(USERS_TABLE => 'u'),
			'LEFT_JOIN'	=> array(
				array(
					'FROM'	=> array(SESSIONS_TABLE => 's'),
					'ON'	=> 's.session_user_id = u.user_id',
				),
			),
			'WHERE'		=> 'u.user_lastvisit > ' . (time() - 86400) . ' OR s.session_user_id <> ' . ANONYMOUS . ' AND u.group_id <> 6 ',
			'GROUP_BY'	=> 'u.user_id',
			'ORDER_BY'	=> 'u.username',
		);
 
		$result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
quel est le probleme ?

Merci
grochenel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 09h34   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 001
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 001
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
mais ça ne fonctionne pas.
Symptômes ?

Elle est horrible cette requête !
Déjà qu'elle est écrite en pseudo SQL et du coup quasi illisible mais en plus :
- Un GROUP BY alors qu'il n'y a pas de fonction de calcul dans le SELECT, c'est pas terrible ! Il vaudrait mieux utiliser DISTINCT. En plus, toutes les colonnes du SELECT devraient figurer dans le GROUP BY !
- Il y a une condition dans le WHERE qui porte sur la table de droite, ce qui revient à transformer la jointure externe gauche en jointure interne !

Si toutes les requêtes de phpBB sont comme ça, on se demande comment ça arrive à fonctionner correctement !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 01h46   #3
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 846
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 846
Points : 1 322
Points : 1 322
oui hélas c'est pas très joli ni en php ni en mysql phpbb, heureusement que c'est produit par une équipe de "pros" et qu'ils en sont à la version 3.x hein?

Vu la doc qu'ils donnent j'avoue que c'est pas toujours évident d'adapter leurs requêtes dans leur templates...

C'est vrai que sans l'erreur on peut rien te dire...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 09h17   #4
Invité de passage
 
Inscription : octobre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 16
Points : 3
Points : 3
Bonjour,

en réalité je n'ai pas d'erreur affichée. La condition pour ne pas selectionner les bots ne fonctionnent pas. .

Je vais regarder pour créer une toute nouvelle requete avec jointure d'apres la doc ici et supprimer l'autre.

bien à vous
grochenel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 16h46   #5
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 846
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 846
Points : 1 322
Points : 1 322
Essaye de faire la requête sans passer par système de pseudo code...

Vérifie qu'avec seulement la condition u.group_id = 6 tu obtiens bien les bots
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h09   #6
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
cela ne serait pas du a une priorisation des clauses ??

Code :
'WHERE ('		=> 'u.user_lastvisit > ' . (time() - 86400) . ' OR s.session_user_id <> ' . ANONYMOUS . ') AND u.group_id <> 6 '
Essayez ...

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 20h03   #7
Invité de passage
 
Inscription : octobre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 16
Points : 3
Points : 3
bonjour,

grace à votre aide je suis parvenu à une requete fonctionnelle.

Code :
1
2
 
'WHERE'		=> ' u.group_id <> 6 AND (u.user_lastvisit > ' . (time() - 86400) . ' OR s.session_user_id <> ' . ANONYMOUS .')' ,
Merci
grochenel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h25.


 
 
 
 
Partenaires

Hébergement Web