[SQL] Join loopt in de soep

Pagina: 1
Acties:

  • Spixo
  • Registratie: Augustus 2004
  • Laatst online: 10:00
Tabel 1:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `verenigingen` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `naam_vereniging` varchar(255) NOT NULL default '',
  `plaats_vereniging` varchar(255) NOT NULL default '',
  `email_secretariaat` varchar(255) NOT NULL default '',
  `coordinaten` varchar(255) NOT NULL default '',
  `snelnaam_vereniging` varchar(255) NOT NULL default '',
  `links_id` tinyint(3) NOT NULL default '0',
  `persoon_secretariaat` text NOT NULL,
  `persoon_trainer` varchar(255) NOT NULL default '',
  `email_trainer` varchar(255) NOT NULL default '',
  `record_actief` char(1) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;


Tabel 2:
code:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `gastenboek` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `naam` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `datum_bericht` datetime NOT NULL default '0000-00-00 00:00:00',
  `bericht` text NOT NULL,
  `vereniging` smallint(5) unsigned default NULL,
  `webmaster_commentaar` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;


Wat moet er nu precies gebeuren? In gastenboek.vereniging staat een id en dat moet worden gekoppeld aan verenigingen.id. Indien er een koppeling mogelijk is moet verenigingen.naam_vereniging worden opgehaald.

Niet altijd is er een koppeling mogelijk!

De query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
    gb.naam,
    gb.email,
    DATE_FORMAT(gb.datum_bericht,'%e') AS dag,
    DATE_FORMAT(gb.datum_bericht,'%m') AS maand,
    DATE_FORMAT(gb.datum_bericht,'%Y') AS jaar,
    gb.bericht,
    gb.webmaster_commentaar,
    ve.naam_vereniging
FROM
    ".$mysql['table_prefix']."gastenboek AS gb, ".$mysql['table_prefix']."verenigingen AS ve
LEFT JOIN
    ".$mysql['table_prefix']."verenigingen
ON
    (gb.vereniging = ve.id)
ORDER BY
    gb.id
DESC LIMIT
    ".$nav->van().", ".$nav->tot(), $sql
)


Wat er mis gaat? Hij haalt het laatste record van de database gastenboek op en plempt die honderden keren neer :+

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

code:
1
2
3
4
5
6
FROM
    ".$mysql['table_prefix']."gastenboek AS gb, ".$mysql['table_prefix']."verenigingen AS ve
LEFT JOIN
    ".$mysql['table_prefix']."verenigingen
ON
    (gb.vereniging = ve.id)

wordt
code:
1
2
3
4
5
6
FROM
    ".$mysql['table_prefix']."gastenboek AS gb
LEFT JOIN
    ".$mysql['table_prefix']."verenigingen AS ve
ON
    (gb.vereniging = ve.id)

[ Voor 18% gewijzigd door NMe op 09-03-2005 17:34 ]

'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.


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:19
Je hebt een scalair product, je selecteerd data uit 3 tabellen, maar je geeft maar een relatie aan tussen 2 tabellen: in je FROM clause staan er 2 tabellen, die je nergens joined: het dbms gaat dus aantal records tabel 1 x aantal records tabel 2 returnen.

https://fgheysels.github.io/


  • Spixo
  • Registratie: Augustus 2004
  • Laatst online: 10:00
-NMe- schreef op woensdag 09 maart 2005 @ 17:34:
code:
1
2
3
4
5
6
FROM
    ".$mysql['table_prefix']."gastenboek AS gb, ".$mysql['table_prefix']."verenigingen AS ve
LEFT JOIN
    ".$mysql['table_prefix']."verenigingen
ON
    (gb.vereniging = ve.id)

wordt
code:
1
2
3
4
5
6
FROM
    ".$mysql['table_prefix']."gastenboek AS gb
LEFT JOIN
    ".$mysql['table_prefix']."verenigingen AS ve
ON
    (gb.vereniging = ve.id)
whoami schreef op woensdag 09 maart 2005 @ 17:39:
Je hebt een scalair product, je selecteerd data uit 3 tabellen, maar je geeft maar een relatie aan tussen 2 tabellen: in je FROM clause staan er 2 tabellen, die je nergens joined: het dbms gaat dus aantal records tabel 1 x aantal records tabel 2 returnen.
Fantastisch dat was inderdaad het probleem! Achteraf nogal simpel maar ik zat er al een paar uur naar te kijken, dan denk je niet meer zo helder ;)