[resolu] Erreur SQL dans index.php?

Archive

Messagepar alctraz » Mer 26 Avr 2006, 13:17

Bonjour,

Après avoir installé oscss, la liste des produits contenu dans une catégorie est inaffichable.

Par exemple un click sur Hardware > Graphic Cards (/catalog/index.php?cPath=1_4) donne l'erreur:

Database reported: Unknown column 'p.products_id' in 'on clause' (Errno: 1054).

Il n'y a pas d'erreur si la catégorie contient des sous-catégories.

Quelqu'un voit de quoi il s'agit?

Merci.
Dernière édition par alctraz le Mer 26 Avr 2006, 13:17, édité 1 fois.
alctraz
Membre actif
 
Messages: 14
Inscription: Mer 26 Avr 2006, 13:00

Messagepar alctraz » Jeu 27 Avr 2006, 17:20

Bon j'ai fini par comprendre l'origine de l'erreur.

J'ai commencé par activer l'effichage de la requète SQL dans le fichier application_top.php.
La voici:
Code: Tout sélectionner
select count(p.products_id) as total from osc_products_description pd, (osc_products p left join osc_manufacturers m on p.manufacturers_id = m.manufacturers_id, osc_products_to_categories p2c) left join osc_specials s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '2' and p2c.categories_id = '10';

La syntaxe SQL employée dans cette requète n'est plus valide:
Please notice that from version 5.0.12 on there is a change in
the syntax of JOIN ... ON (currently being documented) that
makes the syntax SQL:2003 compliant. The essense of the
change is that the ON condition of a JOIN ... ON clause may
reference only tables that are in one of the operands of the
JOIN. For example, given the tables t1(a), t2(b), t3(c),
the query:
select * from t1 join t2 join t3 on t1.a = t3.a;
is incorrect because the operands of the second join are
't2' and 't3', but not 't1', thus referring to 't1.a' is an error.
The correct query is:
select * from (t1 join t2) join t3 on t1.a = t3.a;
Here the first operand of the second join is a virtual table
t1t2 = (t1 join t2), such that 't1t2' contains the column t1.a.

Source: http://bugs.mysql.com/bug.php?id=12943

Il faudrait donc adapter les requètes; il suffit d'ajouter les parenthèses aux bon endroits:

Code: Tout sélectionner
mysql> select count(p.products_id) as total from osc_products_description pd, osc_products p left join osc_manufacturers m on p.manufacturers_id = m.manufacturers_id, osc_products_to_categories p2c left join osc_specials s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '2' and p2c.categories_id = '10';
ERROR 1054 (42S22): Unknown column 'p.products_id' in 'on clause'
mysql> select count(p.products_id) as total from osc_products_description pd, (osc_products p left join osc_manufacturers m on p.manufacturers_id = m.manufacturers_id, osc_products_to_categories p2c) left join osc_specials s on p.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '2' and p2c.categories_id = '10';
+-------+
| total |
+-------+
|     9 |
+-------+
1 row in set (0.01 sec)

La catégorie 19 compte bien 9 éléments
alctraz
Membre actif
 
Messages: 14
Inscription: Mer 26 Avr 2006, 13:00

Messagepar ZBoy » Ven 21 Juil 2006, 14:26

J'ai exactement le même problème... comment y a tu remédié concretement? Est-ce que en gros les requêtes effectuées par osCSS ne sont pas compatibles MySQL 5?

Merci d'avance!
ZBoy
Membre inactif
 
Messages: 2
Inscription: Ven 21 Juil 2006, 14:23

Messagepar manmachine » Ven 28 Juil 2006, 00:56

En effet , oscss est une adaptation de la ms2 qui n'est pas compatible avec MySQL 5 d'ou les erreurs .
manmachine
Membre actif
 
Messages: 76
Inscription: Mer 13 Fév 2008, 21:51

Messagepar f_trt » Jeu 19 Oct 2006, 23:21

Je me permet de continuer ici malgrè le fait que ce soit résolu car je viens de passer une heure pour résoudre le même problème finalement la solution je l'ai trouvée en copiant collant cela dans index.php en lieu et place des anciennes requetes

Code: Tout sélectionner
// We are asked to show only a specific category
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'";
} else {
// We show them all
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'";
}
} else {
// show the products in a given categorie
if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only specific catgeory
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";
} else {
// We show them all
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c left join " . TABLE_SPECIALS . " s on p2c.products_id = s.products_id where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";

Cette solution provient de http://www.oscommerce.com/community/bug ... tatus,open
f_trt
Membre inactif
 
Messages: 6
Inscription: Jeu 19 Oct 2006, 23:16

Messagepar sidarus » Ven 20 Oct 2006, 21:33

Excellent merci

Peux-tu t'inscrire sur notre BugTracker car on va fermer certains forum et éviter ainsi les doublons. Pour rappel le BugTracker à son propre forum attaché. Je l'ai installé il y a quelques jours et je viens d'en finir la configuration. Donc maintenant il est ouvert au public. :)

Codialement ~°sidarus°~
sidarus
Membre très actif
 
Messages: 396
Inscription: Mar 03 Mai 2005, 23:34
Localisation: Geneva (CH)

Messagepar f_trt » Sam 21 Oct 2006, 10:58

En fait ce changement n'est necessaire que si la base de donnée est en version 5 ce qui commence a être le plus en plus le cas par exemple OVH maintenant commence a ne fournir plus que du mysql 5, 1and1 eux laissent depuis déjà pas mal de temps le choix entre mysql4 ou mysql5

Donc si ça fonctionne chez toi sans avoir rien modifié c'est que tu es en version 4 de mysql au passage tu peux savoir cela en regardant sur la page d'accueil de ton admin il figure la version de mysql et la version de php.

A+
f_trt
Membre inactif
 
Messages: 6
Inscription: Jeu 19 Oct 2006, 23:16

Messagepar dnipro » Sam 21 Oct 2006, 13:20

J'ai ausi l'erreur :mad:

J'ai kubuntu et par défaut il y a la version 4.4.4 !

Qu'est ce que je dois faire ?
Y a t il une version à jour ? Ou ?
Faut il que je corrige moi même ?

J'ai essayé de mettre ce code dans la page index.php mais quel est l'ancien code que je dois supprimé ou mettre en commentaire.
Dernière édition par dnipro le Sam 21 Oct 2006, 13:23, édité 1 fois.
oscss RC1 : Quand viendra la version stable ?
A quand la version sur mysql 5 ?
dnipro
Membre actif
 
Messages: 15
Inscription: Ven 20 Oct 2006, 22:36


Retourner vers osCSS 1.1

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

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

cron