Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] Left join werkt wel op 4.1.20, niet op 5.0.37

Pagina: 1
Acties:

  • Martine
  • Registratie: Mei 2002
  • Niet online
Sinds vandaag heb ik er een tweede dedicated server bij :9

Momenteel ben ik bezig de eerste website over te zetten, natuurlijk loop ik tegen enkele problemen aan, zoals kleine foutjes met harde paden die er 'per ongeluk' in zitten.

De huidige server draait met;
Mysql 4.1.20
PHP 4.3.9

De nieuwe server met:
Mysql 5.0.37
PHP 5.0.37

Echter krijg ik deze query niet meer werkend;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    r.itemid,
    r.catid,
    r.content,
    mediabase.title,
    mediabase.video
FROM
    reactions r,
    (SELECT MAX(id) as max_id FROM reactions GROUP BY itemid) as r2
LEFT JOIN
    mediabase ON r.itemid = mediabase.id WHERE r.id = r2.max_id
    AND
    r.delete_by_userid = 0
ORDER BY r.post_date DESC LIMIT 20


Hij komt met de doodeenvoudig met de melding; Unknown column 'r.itemid' in 'on clause'

Het vreemde is echter dat het veld 'itemid' in de table 'reactions' WEL gewoon bestaat.

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 12:10
Probeer de kolommen in je FROM eens tussen haakjes te zetten :) :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
    r.itemid,
    r.catid,
    r.content,
    mediabase.title,
    mediabase.video
FROM(
    reactions r,
    (SELECT MAX(id) as max_id FROM reactions GROUP BY itemid) as r2
)
LEFT JOIN
    mediabase ON r.itemid = mediabase.id WHERE r.id = r2.max_id
    AND
    r.delete_by_userid = 0
ORDER BY r.post_date DESC LIMIT 20

What do you mean I have no life? I am a gamer, I got millions!


  • Martine
  • Registratie: Mei 2002
  • Niet online
Topper opgelost! _/-\o_ maar zou je me ook kunnen uitleggen waarom die stomme haakjes er moeten staan?

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 12:10
Ik ken de precieze details niet, maar het heeft er mee te maken dat vanaf versie 5 de prioriteit van de komma veranderd is, waardoor een JOIN in combinatie met meerdere tabellen in je FROM dus mislopen :)

Edit:
Een artikel over de kwestie :)

[ Voor 20% gewijzigd door Morax op 15-04-2008 17:09 ]

What do you mean I have no life? I am a gamer, I got millions!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Nou uhm je bent legacy syntax met moderne syntax aan het mixen, dat is natuurlijk vragen om problemen :X En die krijg je hier dus inderdaad met prioritisering.

Schrijf al je joins ajb volledig uit, scheelt een hoop van dit soort gezeik en maakt je code tig keer leesbaarder.

Professionele website nodig?


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

curry684 schreef op dinsdag 15 april 2008 @ 17:11:
Nou uhm je bent legacy syntax met moderne syntax aan het mixen, dat is natuurlijk vragen om problemen :X En die krijg je hier dus inderdaad met prioritisering.

Schrijf al je joins ajb volledig uit, scheelt een hoop van dit soort gezeik en maakt je code tig keer leesbaarder.
Kunt ge dit aub specificeren, dat volledig uitschrijven?

Going for adventure, lots of sun and a convertible! | GMT-8


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Nou gewoon:
SQL:
1
2
3
4
5
6
7
8
SELECT r.itemid, r.catid, r.content, mediabase.title, mediabase.video
FROM reactions r
JOIN (SELECT MAX(id) as max_id FROM reactions GROUP BY itemid) as r2
  ON r.id = r2.max_id
LEFT JOIN mediabase
  ON r.itemid = mediabase.id
WHERE r.delete_by_userid = 0
ORDER BY r.post_date DESC LIMIT 20

Had 'm nu een hoop debuggen gescheeld.

Professionele website nodig?

Pagina: 1