[MYSQL] Upgrade 4>5 probleem *

Pagina: 1
Acties:

  • DiLDoG
  • Registratie: Oktober 2002
  • Laatst online: 14-11 09:29
Ik zit met het volgende probleem. Ik heb men server geupgrade naar php5 en mysql5, en nu werkt de volgende query niet meer:

Ik kan in de mysql manual niet echts iets vinden over de verschillen tussen 4 en 5 van de join syntax.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Error

SELECT DISTINCT mos_pshop_product.product_id AS num_rows
FROM mos_pshop_product, mos_pshop_category, mos_pshop_product_category_xref, mos_pshop_shopper_group
LEFT JOIN mos_pshop_product_price ON mos_pshop_product.product_id = mos_pshop_product_price.product_id
WHERE mos_pshop_product_category_xref.category_id = mos_pshop_category.category_id
AND mos_pshop_product_category_xref.category_id = 'b989eb1f194403b39e87d8ca918ce4a1'
AND mos_pshop_product.product_id = mos_pshop_product_category_xref.product_id
AND mos_pshop_product.product_parent_id = '0'
AND mos_pshop_product.product_publish = 'Y'
AND (
(
mos_pshop_shopper_group.shopper_group_id = mos_pshop_product_price.shopper_group_id
)
OR (
mos_pshop_product_price.product_id IS NULL
)
)
GROUP BY mos_pshop_product.product_name
ORDER BY mos_pshop_product.product_sku ASC
LIMIT 0 , 30

MySQL said: Documentation
#1054 - Unknown column 'mos_pshop_product.product_id' in 'on clause'


Weet iemand waarom dit niet meer kan? en hoe ik het fix?

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Misschien ervaar je deze bug (MySQL noemt het een feature)? http://bugs.mysql.com/bug.php?id=13551

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 30-11 19:23

Bezoek eens een willekeurige pagina


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Dit heeft te maken met de manier waarop JOIN handling is veranderd in MySQL 5.x;

Als je in MySQL 4.x een JOIN schreef als:
SQL:
1
2
SELECT *
FROM a, b JOIN c ON c.id=a.cid

... dan werkte dit.
In MySQL 5.x is echter de precedence veranderd, waardoor de join gezien wordt als een join tussen b en c, alsof je zou schrijven:
SQL:
1
2
SELECT *
FROM a, (b JOIN c ON c.id=a.cid)

... en dan valt de tabel a buiten de scope --> unknown column.

Dit is op te lossen door de query te herschrijven als
SQL:
1
2
SELECT * 
FROM (a, b) JOIN c ON c.id=a.cid

... wat ook precies de manier is die MySQL 4.x impliciet gebruikte.

[ Voor 5% gewijzigd door B-Man op 08-12-2006 18:24 ]


Verwijderd

Sowieso zou ik sterk afraden om te selecteren uit méér dan 1 tabel door FROM tabel1, tabel2 te gebruiken. Niet doen. Gebruik gewoon INNER of LEFT JOIN, en als je het echt nodig hebt pas een CROSS JOIN. Maar wel lekker expliciet opgeven.