[RESOLU] erreur dans grosse requete, pb de version?

Invité
Invité n'ayant pas de compte PHPfrance

05 déc. 2007, 20:22

Bonjour à tous,

J'ai une requete SQL qui me renvoie une liste d'utilisateurs dans une boucle php foreach (désolé, elle est balèze...).
J'affiche le code dans une citation car la mise en gras ne marche pas avec les balises pour insérer du code:
SELECT u.id AS id, u.name AS name, u.username AS username, u.registerDate AS registerDate, u.lastvisitDate AS lastvisitDate, g.name AS usertype, u.email AS email, u.block AS block FROM #__users AS u INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.aro_id INNER JOIN #__core_acl_aro_groups AS g ON g.group_id = gm.group_id WHERE (u.usertype NOT LIKE '%administrator%') ORDER BY name ASC LIMIT 0, 50
Elle fonctionne parfaitement en local et en ligne .
J'essaye de rendre la requête plus précise.

Je veux que les résultats retournés prennent en compte un critère de plus qui se trouve dans une table #__comprofiler à ajouter dans la requête. Je fais donc ceci (instructions ajoutées en gras):
SELECT u.id AS id, u.name AS name, u.username AS username, u.registerDate AS registerDate, u.lastvisitDate AS lastvisitDate, g.name AS usertype, u.email AS email, u.block AS block FROM #__users AS u,#__comprofiler AS cp INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.aro_id INNER JOIN #__core_acl_aro_groups AS g ON g.group_id = gm.group_id WHERE (u.usertype NOT LIKE '%administrator%') AND u.id = cp.user_id ORDER BY name ASC LIMIT 0, 50
Et là, boum. ça marche toujours en local (mysql 3.23.49) mais plus en ligne (MySQL - 5.0.44).
Pourtant les tablse et les données sont STRICTEMENT les mêmes sur les 2 serveurs.

Voyez vous une erreur dans l'ajout que j'ai fait?
La structure des tables

Code : Tout sélectionner

-- -- Structure de la table `jos_users` -- CREATE TABLE `jos_users` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) character set latin1 NOT NULL default '', `username` varchar(25) character set latin1 NOT NULL default '', `email` varchar(100) character set latin1 NOT NULL default '', `password` varchar(100) character set latin1 NOT NULL default '', `usertype` varchar(25) character set latin1 NOT NULL default '', `block` tinyint(4) NOT NULL default '0', `sendEmail` tinyint(4) default '0', `gid` tinyint(3) unsigned NOT NULL default '1', `registerDate` datetime NOT NULL default '0000-00-00 00:00:00', `lastvisitDate` datetime NOT NULL default '0000-00-00 00:00:00', `activation` varchar(100) character set latin1 NOT NULL default '', `params` text character set latin1 NOT NULL, PRIMARY KEY (`id`), KEY `usertype` (`usertype`), KEY `idx_name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1191 ; -- -- Structure de la table `jos_core_acl_aro` -- CREATE TABLE `jos_core_acl_aro` ( `aro_id` int(11) NOT NULL auto_increment, `section_value` varchar(240) NOT NULL default '0', `value` varchar(240) NOT NULL default '', `order_value` int(11) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `hidden` int(11) NOT NULL default '0', PRIMARY KEY (`aro_id`), UNIQUE KEY `jos_gacl_section_value_value_aro` (`section_value`(100),`value`(100)), KEY `jos_gacl_hidden_aro` (`hidden`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1191 ; -- -- Structure de la table `jos_core_acl_aro_groups` -- CREATE TABLE `jos_core_acl_aro_groups` ( `group_id` int(11) NOT NULL auto_increment, `parent_id` int(11) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `lft` int(11) NOT NULL default '0', `rgt` int(11) NOT NULL default '0', PRIMARY KEY (`group_id`), KEY `parent_id_aro_groups` (`parent_id`), KEY `jos_gacl_parent_id_aro_groups` (`parent_id`), KEY `jos_gacl_lft_rgt_aro_groups` (`lft`,`rgt`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ; CREATE TABLE `jos_core_acl_groups_aro_map` ( `group_id` int(11) NOT NULL default '0', `section_value` varchar(240) NOT NULL default '', `aro_id` int(11) NOT NULL default '0', UNIQUE KEY `group_id_aro_id_groups_aro_map` (`group_id`,`section_value`,`aro_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Structure de la table `jos_comprofiler` -- CREATE TABLE `jos_comprofiler` ( `id` int(11) NOT NULL default '0', `user_id` int(11) NOT NULL default '0', `firstname` varchar(100) character set latin1 default NULL, `middlename` varchar(100) character set latin1 default NULL, `lastname` varchar(100) character set latin1 default NULL, `hits` int(11) NOT NULL default '0', `message_last_sent` datetime NOT NULL default '0000-00-00 00:00:00', `message_number_sent` int(11) NOT NULL default '0', `avatar` varchar(255) character set latin1 default NULL, `avatarapproved` tinyint(4) default '1', `approved` tinyint(4) NOT NULL default '1', `confirmed` tinyint(4) NOT NULL default '1', `lastupdatedate` datetime NOT NULL default '0000-00-00 00:00:00', `registeripaddr` varchar(50) character set latin1 NOT NULL default '', `cbactivation` varchar(50) character set latin1 NOT NULL default '', `banned` tinyint(4) NOT NULL default '0', `banneddate` datetime default NULL, `unbanneddate` datetime default NULL, `bannedby` int(11) default NULL, `unbannedby` int(11) default NULL, `bannedreason` mediumtext character set latin1, `acceptedterms` tinyint(1) NOT NULL default '0', `cb_civ` varchar(255) collate latin1_general_ci default NULL, `cb_tel` varchar(255) collate latin1_general_ci default NULL, `cb_promo` varchar(255) character set latin1 default NULL, `cb_curs` varchar(255) character set latin1 default NULL, `cb_cotis` varchar(255) character set latin1 default NULL, `cb_situat` varchar(255) collate latin1_general_ci default NULL, `cb_employ` varchar(255) collate latin1_general_ci default NULL, `cb_poste` varchar(255) collate latin1_general_ci default NULL, `cb_autremail` varchar(255) collate latin1_general_ci default NULL, `cb_pgenable` varchar(255) collate latin1_general_ci default NULL, `cb_pgautopublish` varchar(255) collate latin1_general_ci default NULL, `cb_pgautoapprove` varchar(255) collate latin1_general_ci default NULL, `cb_pgshortgreeting` varchar(255) collate latin1_general_ci default NULL, `cb_pgtotalquotasize` varchar(255) collate latin1_general_ci default NULL, `cb_pgtotalquotaitems` varchar(255) collate latin1_general_ci default NULL, `cb_pguploadsize` varchar(255) collate latin1_general_ci default NULL, `cb_pgtotalitems` varchar(255) collate latin1_general_ci default NULL, `cb_pgtotalsize` varchar(255) collate latin1_general_ci default NULL, `cb_pglastupdate` date default NULL, `cb_pgaccessmode` varchar(255) collate latin1_general_ci default NULL, `cb_pgdisplayformat` varchar(255) collate latin1_general_ci default NULL, `cb_pageviadeo` varchar(255) collate latin1_general_ci default NULL, `cb_secteuracti` varchar(255) collate latin1_general_ci default NULL, `cb_adremployeur` mediumtext collate latin1_general_ci, PRIMARY KEY (`id`), UNIQUE KEY `user_id` (`user_id`), KEY `apprconfbanid` (`approved`,`confirmed`,`banned`,`id`), KEY `avatappr_apr_conf_ban_avatar` (`avatarapproved`,`approved`,`confirmed`,`banned`,`avatar`), KEY `lastupdatedate` (`lastupdatedate`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Merci pour vos réponses.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 déc. 2007, 20:45

Et là, boum. ça marche toujours en local (mysql 3.23.49) mais plus en ligne (MySQL - 5.0.44).
Qu'entends-tu par "ne marche pas" ? Si la requête échoue, précise le message d'erreur.

Assure-toi également de publier les requêtes telles qu'elles sont exécutées, pas telles que tu les écris dans ton script.

http://www.phpfrance.com/forums/voir_sujet-19378.php

Invité
Invité n'ayant pas de compte PHPfrance

06 déc. 2007, 10:24

La requete affichée ici n'est pas celle qui est dans mon code, j'ai copié/collé le résultat après exécution avec un echo $query.

Par contre je n'arrive pas à afficher l'erreur sql. Je suis dans joomla et c'est pas très simple.
Il me semble cependant que c'est une erreur à l'execution du genre "...is not a mysql ressource".

Quand j'execute directement la requete dans phpmyamin, j'ai "erreur de syntaxe près de la ligne 1", que ce soit en local ou en ligne.

Invité
Invité n'ayant pas de compte PHPfrance

06 déc. 2007, 10:45

je sais que c'est pas évident, mais le problème ne survient je lorque je rajoute les 2 instructions en gras dans la requete postée.

Je suspecte la syntaxe d'avoir évolué entre les 2 versions de mysql que je cite. Peut être que les infos sur la nouvelle table #__comprofiler(en gras) sont mal positionnées?

Eléphanteau du PHP | 40 Messages

06 déc. 2007, 11:38

le probleme vient de ta façon de lier tes tables ou tu le fait dans le FROM avec les INNER JOIN ou tu le fait dans la clause WHERE avec le mon_id1 = son_idAlui . mais la c'est du schimlitout melanger normal que sa fonctionne pas.
FROM #__users AS u,#__comprofiler AS cp INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.aro_id INNER JOIN #__core_acl_aro_groups AS g ON g.group_id = gm.group_id WHERE (u.usertype NOT LIKE '%administrator%') AND u.id = cp.user_id ORDER BY name ASC LIMIT 0, 50
je te soupsonne de pas avoir ecrit la requette de depart.
en construction http://plus2site.fr

Eléphanteau du PHP | 40 Messages

06 déc. 2007, 11:50

je prefaire faire les jointure de table dans la clause FROM c'est plus approprier.Je te propose une corerction:
FROM #__users AS u INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.aro_id INNER JOIN #__core_acl_aro_groups AS g ON g.group_id = gm.group_id INNER JOIN #__comprofiler AS cp ON u.id = cp.user_id WHERE (u.usertype NOT LIKE '%administrator%') ORDER BY name ASC LIMIT 0, 50
peut etre que j'ai fait des erreurs de symtax mais tu doit comprendre pourquoi sa plantait.J'ai pas marquer le debut de la requette pour alleger.
en construction http://plus2site.fr

Invité
Invité n'ayant pas de compte PHPfrance

06 déc. 2007, 12:08

super, ton conseil INNER JOIN fonctionne à merveille sur les 2 versions! Merci d'avoir essayé malgré l'aspect rébabatif de la requete.
Effectivement elle est pas de moi, je suis dans joomla entrain de modifier des composants.
Merci encore.

Eléphanteau du PHP | 40 Messages

06 déc. 2007, 12:10

ps: marque resolut tu doit avoir un bouton en haut: merci
en construction http://plus2site.fr

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 déc. 2007, 14:08

ps: marque resolut tu doit avoir un bouton en haut: merci
Il à posté en tant qu'invité donc il ne peut le faire lui même.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute