[MySQL] selecteren uit dezelfde tabel

Pagina: 1
Acties:

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
Hoi, sorry voor de wat vreemde topicnaam maar ik kan even niet een betere verzinnen.

Ik wil dingen uit dezelfde tabel met elkaar vergelijken.
De tabel ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
CREATE TABLE `ck_individuele_toewijzing` (
  `id` int(255) NOT NULL auto_increment,
  `user_id` int(255) NOT NULL default '0',
  `competentie_id` int(255) NOT NULL default '0',
  `vaardigheid` int(255) NOT NULL default '0',
  `antwoord` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

Nu wil ik dat een mysql query selecteert waar welke users dezelfde antwoorden gegeven hebben.

Dus op de volgende manier.
user 1 selecteert bij vaardigheid x als antwoord basis en user 2 selecteert ook bij vaardigheid x als antwoord basis. Alleen hoe haal ik dat er nu uit?
Ik heb nu de volgende query zitten maken maar die klopt voor geen meter:
code:
1
WHERE competentie_id='1' AND antwoord='basis' AND (user_id='$user_id1' AND user_id='$user_id2')";


Ik heb hier al gezocht op de Mysql website. en op GoT met de deze trefwoorden.

Wie kan mij helpen bij deze query

Verwijderd

Volgens mij moet je de gedachte hebben van onderstaande query. Ben geen sql guru, maar denk dat je hiermee wel verder kan bouwen..

SELECT * FROM table AS a JOIN table AS b ON a.antwoord = b.antwoord

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Sooterd's antwoord klopt als je de betreffende vraag of antwoord weet. Als je alle overlappende velden wil hebben moet je aan een cross join als ik je vraag correct snap, wat subtiel af te raden is in het algemeen :)

Professionele website nodig?


  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
het antwoord is al bekend dus dan zou ik met scooterd's antwoord verder moeten komen. Maar nog wel even een vraag waarom is een cross join af te raden?

[ Voor 15% gewijzigd door TwoR op 13-04-2004 15:17 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

TwoR schreef op 13 april 2004 @ 15:16:
het antwoord is al bekend dus dan zou ik met scooterd's antwoord verder moeten komen. Maar nog wel even een vraag waarom is een cross join af te raden?
Als je 1000 records in je tabel hebt is de cross join 1000000 records. Just a thought ;)

Professionele website nodig?


  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
Oke bedankt voor jullie antwoorden. Hier nog even mijn oplossing zodat de volgende die een soort gelijk probleem heeft er ook wat aan heeft:

code:
1
2
3
$sql_basis = "SELECT * FROM ck_individuele_toewijzing AS a JOIN ck_individuele_toewijzing AS b 
ON a.antwoord = b.antwoord AND a.vaardigheid_id  = b.vaardigheid_id 
WHERE a.antwoord='basis' AND a.competentie_id='1' AND a.user_id = '$user_id1' AND b.user_id = '$user_id2' ";

[ Voor 11% gewijzigd door TwoR op 13-04-2004 15:26 ]


Verwijderd

Zoals ik het heb geleerd:

SELECT * FROM table AS a, table AS b WHERE a.antwoord=b.antwoord;

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 13 april 2004 @ 15:33:
Zoals ik het heb geleerd:

SELECT * FROM table AS a, table AS b WHERE a.antwoord=b.antwoord;
Dit is gewoon een short-hand alias voor een reguliere INNER JOIN oftewel JOIN. Puur syntactisch verschil.

Professionele website nodig?


Verwijderd

De style die Vledder hanteerd is volgens de regels van de oudere SQL-89 en de methode die ik heb gebruikt is volgens de nieuwere SQL-92 variant. Beide query's kunnen volgens mij door systemen anders worden geïnterpreteerd, volgens de verschillende bronnen die ik heb gelezen wordt het gebruik van de SQL-92 syntax aangeraden. Daarnaast in de wat uitgebreidere query's vind ik de SQL-92 syntax prettiger lezen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 13 april 2004 @ 15:50:
De style die Vledder hanteerd is volgens de regels van de oudere SQL-89 en de methode die ik heb gebruikt is volgens de nieuwere SQL-92 variant. Beide query's kunnen volgens mij door systemen anders worden geïnterpreteerd, volgens de verschillende bronnen die ik heb gelezen wordt het gebruik van de SQL-92 syntax aangeraden. Daarnaast in de wat uitgebreidere query's vind ik de SQL-92 syntax prettiger lezen.
Ik gebruik ook altijd de JOIN-syntax, maar afaik zijn de twee varianten by standard volledig interchangeable, en worden ze dus identiek uitgevoerd.

Professionele website nodig?


Verwijderd

Ik twijfelde daar ook aan; nu dus niet meer ;)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 13 april 2004 @ 15:56:
Ik twijfelde daar ook aan; nu dus niet meer ;)
Zo'n authoriteit op SQL-gebied ben ik nu ook weer niet hoor :P Maar 99% zeker ben ik hier wel over.

Professionele website nodig?


  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
code:
1
2
3
$sql_basis = "SELECT * FROM ck_individuele_toewijzing AS a JOIN ck_individuele_toewijzing AS b 
ON a.antwoord = b.antwoord AND a.vaardigheid_id  = b.vaardigheid_id 
WHERE a.antwoord='basis' AND a.competentie_id='1' AND a.user_id = '$user_id1' AND b.user_id = '$user_id2' ";

Ik gebruik nu dus deze code alleen werkt dit niet op de server van mijn provider (lokaal wel)
Lokaal draait MySQL versie 4.0.15
Bij mijn provider draaien ze MySQL versie 3.23.54

Is dit de rede dat deze query niet werkt?

[ Voor 7% gewijzigd door TwoR op 13-04-2004 18:01 ]


  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
Ik had het inderdaad bij het rechte eind JOIN werkt pas vanaf versie 4.0.11 nu heb ik een INNER JOIN gebruitk deze werkt wel (vanaf versie 3.23.19). Iedereen nogmalas bedankt voor de antwoorden.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

TwoR schreef op 14 april 2004 @ 10:28:
Ik had het inderdaad bij het rechte eind JOIN werkt pas vanaf versie 4.0.11 nu heb ik een INNER JOIN gebruitk deze werkt wel (vanaf versie 3.23.19). Iedereen nogmalas bedankt voor de antwoorden.
Bliep, "JOIN" zonder toelichting is een "INNER JOIN"... :?

Professionele website nodig?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

curry684 schreef op 14 april 2004 @ 11:03:
Bliep, "JOIN" zonder toelichting is een "INNER JOIN"... :?
Ja, maar dat zegt nog niet dat mysql dat JOIN-keyword ook zonder prefix accepteerde in pre-4.0.11

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

ACM schreef op 14 april 2004 @ 11:41:
[...]

Ja, maar dat zegt nog niet dat mysql dat JOIN-keyword ook zonder prefix accepteerde in pre-4.0.11
Omg voeg dat even toe in je MySQL hatelist :+

Professionele website nodig?


Verwijderd

Ik snap een ding niet.
Je wilt user projecteren die allemaal het zelfde antwoord hebben gegeven, en je weet het antwoord...
Dan is dit toch voldoende:
select user from table where antwoord = "bekent";

:X

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 20:38

TwoR

Gekleurde stippen

Topicstarter
Verwijderd schreef op 14 april 2004 @ 13:11:
Ik snap een ding niet.
Je wilt user projecteren die allemaal het zelfde antwoord hebben gegeven, en je weet het antwoord...
Dan is dit toch voldoende:
select user from table where antwoord = "bekent";
:X
Nee want er moet niet naar alle users worden gekeken en daarbij moet ie alleen de overlapping terug geven en dat gaat je niet lukken met wat jij zegt.
Pagina: 1