[SQL/PHP] Waarom geeft mijn join lege resultaten terug?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • phroze
  • Registratie: Augustus 2002
  • Laatst online: 17-08-2023

phroze

Malle Henkie

Topicstarter
Hoi!

Ik heb een category tabel die opzichzelf moet joinen om zo een mooie array op te bouwen voor een boomstructuur. Ik krijg wel alle resultaten terug, maar alle rows zonder parent_id zijn leeg, terwijl ze in de database wel gevuld zijn. Iemand enig idee wat er mis gaat?

De structuur
code:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `jos_shop_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  `name` varchar(150) NOT NULL,
  `description` text,
  `ordering` int(10) unsigned NOT NULL DEFAULT '0',
  `created` datetime DEFAULT NULL,
  `published` tinyint(1) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;


De query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
    SELECT 
        *
    FROM
        shop_category c
    LEFT JOIN 
        shop_category c2
    ON
        c2.parent_id = c.id
    WHERE
        
    ORDER BY
        c.name ASC, c.ordering ASC


Of heeft iemand nog een beter idee om een boomstructuur op te bouwen?

Bij voorbaat dank!

XP1800/doet het niet :(


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je doet je join verkeerd om, je zal er ofwel een right join van moeten maken, ofwel je aliassen om moeten draaien.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
    SELECT 
        *
    FROM
        shop_category c
    LEFT JOIN 
        shop_category c2
    ON
        c.parent_id = c2.id
    WHERE
        
    ORDER BY
        c.name ASC, c.ordering ASC

Dat zou volgens mij beter moeten gaan.

Daarnaast zal ik dit linkje maar weer eens spammen: http://articles.sitepoint...ierarchical-data-database :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Wat doet die WHERE in de query? Er staat verder nergens een voorwaarde, deze query is dus fout en zou een foutmelding moeten opleveren.

Een LEFT JOIN moet altijd resultaten opleveren, ook wanneer er geen matches zijn met de gegevens in de rechter dataset (dezelfde tabel in dit geval).