Hallo,
Ik moet resultaten halen uit 3 tabellen en ik zou niet weten hoe ik dat voor elkaar krijg.
Er moet eerst in de volgende 2 tabellen gezocht worden naar resultaten, welke dan op datum moeten worden gesorteerd:
Ik wil van de eerste tabel, de id, datum, start_tijd, opmerkingen en activiteit opvragen.Code:CREATE TABLE IF NOT EXISTS `aanwezigheid` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `datum` date NOT NULL, `start_tijd` varchar(5) NOT NULL, `eind_tijd` varchar(5) NOT NULL, `opmerkingen` text NOT NULL, `activiteit` varchar(50) NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; CREATE TABLE IF NOT EXISTS `training` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datum` date NOT NULL, `tijd` varchar(5) NOT NULL, `herhaling` tinyint(1) NOT NULL, `groep_id` int(11) NOT NULL, `type` varchar(20) NOT NULL, PRIMARY KEY (`id`), KEY `groep_id` (`groep_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
En van de tweede tabel, de id, datum, tijd, groep_id en type.
Deze resultaten moeten dan doorelkaar heen komen gesorteerd op datum.
Vervolgens wil ik nog kijken welke groepsleden er in een bepaalde groep zitten uit de volgende tabel:
Code:CREATE TABLE IF NOT EXISTS `groep_leden` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `hash` varchar(32) NOT NULL, PRIMARY KEY (`id`), KEY `user_id` (`user_id`,`hash`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;
- Ingewikkelde query met joins
-
14-06-2011, 10:45 #1
- Berichten
- 408
- Lid sinds
- 16 Jaar
Ingewikkelde query met joins
-
-
14-06-2011, 10:57 #2
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Ingewikkelde query met joins
Volgens mij mis je nog ergens een verbinding..
In de eerste tabel staan (waarschijnlijk) de leden die aanwezig zijn bij een bepaalde activiteit (= training?). Dus je zou in die eerste tabel nog een training_id moeten aanmaken.. ik snap je database ontwerp niet helemaal, maar zo te zien mis je een paar koppelingen..
Ook begijp ik de connectie tussen training en activiteit niet, dat lijkt me hetzelfde? Of je moet al willen zoeken op zowel trainingen als op activiteit. Als je dan wilt weten welke leden in een groep zitten ga ik ervan uit dat je bij groep_leden met 'id' het 'groep_id' bedoelt.
Het werkt allemaal wat makkelijker als je alles meer beschrijvend maakt, het is niet erg om lange velden te hebben in je database.
Wat ik doe is bijvoorbeeld voor een tabel groep:
grp_id
grp_naam, etc.
En als ik dan een tabel heb met groep_leden krijg je:
grp_id
usr_id
hash
Zo blijven de benamingen van je ID als een soort referentie naar de juiste tabel, wat je hele database ontwerp dan weer duidelijker maakt.
-
14-06-2011, 11:01 #3
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Ingewikkelde query met joins
Je hebt gelijk wat betreft de koppelingen, maar bij het aanmaken van een groep worden er dus gegevens in de tabel groepen gezet en in de tabel groep_leden, en dan is het niet mogelijk om in de groep_leden ook gelijk een groep_id te zetten, aangezien deze groep_id in de tabel groepen een autoincrement heeft, waardoor je deze dus niet in groep_leden kunt zetten.
Daarom heb ik gekozen voor hash als koppeling tussen de 2 tabellen.
Training en aanwezigheid zijn 2 verschillende dingen, maar deze moeten dus wel in het zelfde lijstje komen te staan.
Hier heb ik een live voorbeeld:http://bit.ly/kUWXCC
-
14-06-2011, 12:26 #4
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Ingewikkelde query met joins
mysql_insert_id(); na de eerste query en je hebt je autoincrement waarde. Je kunt die waarde natuurlijk wel in groepen_leden zetten, dat is de best mogelijke koppeling.
-
14-06-2011, 12:26 #5
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Ingewikkelde query met joins
Top! Dan ga ik daar eerst even mee aan de slag.
Werk ik dan nu op de goede manier?
Code:$insert = "INSERT INTO groepen (groep_naam) VALUES (".mysql_real_escape_string($_POST['groepsnaam'])."')"; mysql_query($insert) or die (mysql_error()); foreach($_POST["nieuwegroep"] as $leden) { mysql_query("INSERT INTO groep_leden (user_id, groep_id) VALUES ('".$leden.", ".mysql_insert_id()."')") or die(mysql_error()); }
Het is gelukt om de goede id mee te geven, maar nu rest alleen nog de ingewikkelde query.
Het zou mooi zijn als iemand hier mij mee kan helpen.Laatst aangepast door Mathijs Kingma : 14-06-2011 om 13:21
-
14-06-2011, 12:43 #6
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Ingewikkelde query met joins
Yep that's it. Met mysql_insert_id() haal je het laatste ID op dat is toegevoegd. Dat maakt in elk geval je koppelingen wat logischer. Het zoeken in 2 tabellen wordt daarmee nog niet opgelost, je zult hier echt 2 aparte zoekopdrachten van moeten maken en dan bijvoorbeeld van '14-06-2011' een veld moeten maken waarmee je kunt sorteren, bijv.
20110614 => hiermee kun je sorteren op tijd als je deze in de array plaatst.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic