anoniem Geplaatst: 19 januari 2004 Delen Geplaatst: 19 januari 2004 Beste mensen, ik heb de volgende drie tabellen: ================ Tabel 1 sponsor: ================ sponsor_id; sponsor_naam; sponsor_adres; sponsor_postcode; enz. ====================== Tabel 2 sponsor_type: ====================== sponsor_type_id; sponsor_type_naam; met inhoud "shirt", "bal", "reclamebord", "clubblad" ================================= Tabel 3 sponsor_per_sponsor_type: ================================= sponsor_type_id; sponsor_id; Nu worden in tabel 3 de sponsoren gekoppeld aan hetgeen wat zij sponseren. Dit kunnen meer dan 1 type wezen. Dus een sponsor kan shirtsponsor zijn maar ook een advertentie in het clubblad hebben. Nu wil ik via een SELECT met JOIN steeds alle sponsoren filteren die bijvoorbeeld shirt sponsor zijn. Dus ik wil een lijst genereren met alleen die sponsoren die shirt sponsor zijn, maar dit lukt me niet. Hier onder staat het script wat ik tot nu toe heb, maar ik krijg de volgende foutmelding: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/htdocs/vvscharn/sponsoren/shirt_sponsoren.php on line 9 dit is het script [code:1:e0c52532b6] <?php $db = mysql_connect("localhost", "******", "*****") or die ("Verbinding mislukt"); mysql_select_db("vvscharn", $db); $SQL_statement = "SELECT * FROM sponsor_type, sponsor_per_sponsor_type, sponsor WHERE sponsor_type.sponsor_type_naam=shirt AND sponsor_type.sponsor_type_id = sponsor_per_sponsor_type.sponsor_type_id AND sponsor_per_sponsor_type.sponsor_type_id=sponsor.sponsor_id"; $resultset= mysql_query($SQL_statement); while($shirt = mysql_fetch_array($resultset)) { //dit is lijn 9 echo $shirt['sponsor_naam'] . " " . $shirt['sponsor_adres'] . "<br>" . $shirt['sponsor_postcode'] . " " . $shirt['sponsor_plaats'] . "<p>"; } mysql_close(); ?> [/code:1:e0c52532b6] Kan iemand mij verder helpen alvast heel erg bedankt Quote Link naar reactie
anoniem Geplaatst: 19 januari 2004 Auteur Delen Geplaatst: 19 januari 2004 [code:1:5cc1032379]$query = "select sponsor_adres.tabel_1, sponsor_naam.tabel_1, enz, sponsor_type_naam.tabel_2 from tabel_1 inner join tabel_2 (on sponsor_id.tabel_1 = sponsor_id.tabel_2)";[/code:1:5cc1032379] Hiermee krijg je een output van sponsor_adres, sponsor_naam, enz Alleen het nut van de derde tabel ontgaat mij dan [edit] Misschien beter en wat je bedoelde :) [code:1:5cc1032379]$query = "select sponsor_adres.tabel_1, sponsor_naam.tabel_1, enz, sponsor_type_naam.tabel_2 from tabel_1 inner join tabel_3 (on sponsor_id.tabel_1 = sponsor_id.tabel_3) where sponsor_type_id.tabel_3 = sponsor_type_id.tabel_2";[/code:1:5cc1032379][/edit] Quote Link naar reactie
anoniem Geplaatst: 19 januari 2004 Auteur Delen Geplaatst: 19 januari 2004 Beste sjouken, die derde tabel is er om juist de van elke sponsor aan te geven wat hij sponsort. Zoals jij de select query hebt opgezet is niet helemaal correct want sponsor_id bestaat niet in tabel2. Ik wil dus graag aan de hand van tabel3 het gesponsorde koppelen aan de sponsor. En de gegevens van sponsor wil ik weergeven. Alleen ik krijg steeds een mysql_fetch_array error, wat ik ook probeer. Alvast weer bedankt Quote Link naar reactie
anoniem Geplaatst: 19 januari 2004 Auteur Delen Geplaatst: 19 januari 2004 Je tabel 3 is onvolledig. Daar hoort nog een unieke sleutel bij. Tabel 1 heeft immers een 1:N relatie met Tabel 3. Nu heb geen verstand van PhP maar: Mag je shirt zomaar in de sql plaatsen? Moeten daar geen quotes omheen? Daarnaast lijkt me shirt ongepast, en kun je je beperken tot twee tabellen. Dan lijkt me ook de volgorde niet helemaal juist. Maar voor een lesje sql: http://members.tripod.com/er4ebus/sql/index.htm Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 [quote:b64a9e302e="Wiep Corbier"]Mag je shirt zomaar in de sql plaatsen? Moeten daar geen quotes omheen?[/quote:b64a9e302e]Dit staat los van PHP aangezien de query gewoon wordt losgelaten op de MySQL database. Dus er moeten idd quotes omheen, alleen om nummerieke waarden hoeven (mogen?) geen quotes. - Bas Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 CREATE TABLE sponsor ( sponsor_id INT NOT NULL PRIMARY KEY auto_increment, sponsor_naam VARCHAR(100) NOT NULL, sponsor_adres VARCHAR(100) NOT NULL, sponsor_plaats VARCHAR(100) NOT NULL, sponsor_tel VARCHAR(11) NOT NULL, sponsor_website VARCHAR(100) NOT NULL, sponsor_mail VARCHAR(100) NOT NULL ); CREATE TABLE sponsor_type ( sponsor_type_id INT NOT NULL PRIMARY KEY auto_increment, sponsortype_naam VARCHAR(100) NOT NULL ); CREATE TABLE sponsor_per_sponsor_type ( sponsor_id INT NOT NULL, sponsor_type_id INT NOT NULL, UNIQUE sponsor_index (sponsor_id, sponsor_type_id) ); Hierboven heb ik de tabelstructuur nog maar even neergezet, daar ik nog steeds niet de juiste oplossing heb gevonden. Iemand misschien toch nog een idee waar het nu misgaat. Alvast bedankt Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 [quote:03ae59886a="Wiep Corbier"]Je tabel 3 is onvolledig. Daar hoort nog een unieke sleutel bij. [/quote:03ae59886a]De relatie tussen sponsor en sponsortype is N-M. De derde tabel is dus gewoon een koppeltabel om deze relatie om te zetten naar twee 1-N relaties. De beide primary keys uit de sponsor en sponsortype table vormen hier dus samen de primary key voor de koppeltabel. De query wordt: [code:1:03ae59886a] SELECT sponsor.*, sponsor_type.sponsortype_naam FROM sponsor, sponsor_per_sponsor_type, sponsor_type WHERE sponsor.sponsor_id = sponsor_per_sponsor_type.sponsor_id AND sponsor_type.sponsor_type_id = sponsor_per_sponsor_type.sponsor_type_id AND sponsor_type.sponsortype_naam = 'shirt' [/code:1:03ae59886a] Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 Tja, ik blijf een koppeltabel een vreemde constructie vinden. Ik gebruik het dus zelf nooit. Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 Hoe neem jij dan een N-M relatie op in je datamodel? :-? Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 Niet. Ik heb wel eens voorbeelden gezien waar het nuttig was, maar heb het zelf nog nooit hoeven gebruiken. Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 Iedereen erg bedankt voor jullie reactie, ik ben tot de volgende oplossing gekomen en het werkt (eindelijk): [code:1:3ecc23e0cc] <?php $db = mysql_connect("localhost", "*******", "******") or die ("Verbinding mislukt"); mysql_select_db("vvscharn", $db); $SQL_statement= "SELECT s.sponsor_naam, s.sponsor_adres, s.sponsor_postcode, s.sponsor_plaats FROM sponsor s, sponsor_type t, sponsor_per_sponsor_type st WHERE t.sponsortype_naam = 'shirt' AND s.sponsor_id = st.sponsor_id AND st.sponsor_type_id = t.sponsor_type_id ORDER BY s.sponsor_naam ASC"; $resultset= mysql_query($SQL_statement)or die(mysql_error()); while($shirt = mysql_fetch_array($resultset)) { echo $shirt['sponsor_naam'] . " " . $shirt['sponsor_adres'] . "<br>" . $shirt['sponsor_postcode'] . " " . $shirt['sponsor_plaats'] . "<p>"; } mysql_close(); ?> [/code:1:3ecc23e0cc] Nogmaals bedankt iedereen en wellicht tot de volgende vraag. Quote Link naar reactie
anoniem Geplaatst: 20 januari 2004 Auteur Delen Geplaatst: 20 januari 2004 Ik had dus gedaan: ================ Tabel 1 sponsor: ================ sponsor_id; sponsor_naam; sponsor_adres; sponsor_postcode; enz. ====================== Tabel 2 sponsor_type: ====================== type_id; sponsor_id (link tabel 1) type_naam; met inhoud "shirt", "bal", "reclamebord", "clubblad" Dan krijg je bijvoorbeeld voor sponsoren in tabel 2 1, [color=red:0920ad100e]1[/color:0920ad100e], Shirt 2, [color=red:0920ad100e]1[/color:0920ad100e], Bal 3. [color=red:0920ad100e]1[/color:0920ad100e], Clubblad 4, 2, Bal 5, [color=blue:0920ad100e]3[/color:0920ad100e], Shirt 6, [color=blue:0920ad100e]3[/color:0920ad100e], Bal 7, [color=blue:0920ad100e]3[/color:0920ad100e], Reclamebord. Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 @Wiep Je voert nu wel redundantie in je tabel in. Termen als "Bal" en "Shirt" zijn hiervan een duidelijk voorbeeld in jouw stukje code. Op zich is het wel te overzien, maar het neemt niet weg dat een N-M relatie een "betere" methode is aangezien het de redundantie vermindert. - Bas Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 Vind je? Uiteraard zou ik het nét iets anders doen, maar wat jij redundantie noemt is in dit voorbeeld geen redundantie. De waarden 'Bal' etc zouden uit een Runtime Array kunnen komen Een tabel die uitsluitend bestaat uit gegevens die al in andere tabellen bestaat, dat noem ik redundant. Ook moet je rekening houden met duidelijkheid en leesbaarheid. Gezamelijk 'onderhoudbaarheid' dus . Kortom, ik zie echt geen voordelen in de constructie zoals behandeld. Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 Ik wil geen welles/nietes-discussie starten, maar ik wil toch nog graag even op je reageren...[quote:476ac74650="Wiep Corbier"]Een tabel die uitsluitend bestaat uit gegevens die al in andere tabellen bestaat, dat noem ik redundant.[/quote:476ac74650]Dat is ook een vorm van redundantie. Maar stel je nou eens voor dat er een hele lijn t-shirts is, en verschillende maten en kleuren ballen. Op dat moment moet je er toch echt een aparte tabel van maken. Tenminste, dat lijkt mij. Nu begin ik nog te twijfelen ook... Wat is wijsheid, ik weet het niet. Ik zou hoogstwaarschijnlijk de N-M constructie nemen... - Bas Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 Dan maken we er ook geen welles-nietes discussie van BasHamar. Maar neem van mij aan mijn oplossing de meest gangbare is. En ook ik zou in dit geval 3 tabellen hebben, maar dan zo: Tabel 1 ----------------- Sponsor_id (uniek) sponsor_naam Sponsor_adres enz Tabel 2 ----------------- TypeID (uniek) Sponsor_id (link met Tabel 1) Sponsor_Type Tabel 3 (opzoektabel) ----------------- Sponsor_Type (uniek) Sponsor-type bevat: Shirt Bal Reclamebord etc Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 Zo ingewikkeld is die toch ook weer niet? Maar het is dus duidelijk een kwestie van persoonlijke voorkeur. En misschien ontbeer ik wel ervaring in dit vakgebied, maar daar kom ik tzt dan wel achter. Voorlopig sta ik achter mijn standpunten zoals hierboven aangegeven, als iemand goede argumenten aanvoert dat er iets fout is, wat en waarom dan zal ik zeker nog eens kijken naar mijn standpunten. - Bas [b:7a7abc71dd]Edit:[/b:7a7abc71dd] Hé Wiep, niet je posts veranderen als ik een antwoord typ! ;) In ieder geval kan ik me een stuk beter vinden met je nieuwe antwoord, zoiets zou ik waarschijnlijk ook maken. Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 [quote:c604a1ee87]Hé Wiep, niet je posts veranderen als ik een antwoord typ![/quote:c604a1ee87] Sorry, maar ik wilde het even duidelijk aangeven. :lol: ps ik zou ook nog een tabelletje met 'gemeentenamen' hebben volgens hetzelfde idee als tabel 3. Die gebruik ik dan in tabel 1. Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 [quote:a3c80271db="BasHamar"]alleen om nummerieke waarden hoeven (mogen?) geen quotes. - Bas[/quote:a3c80271db] Mag wel, hoeft niet :) Het kan natuurlijk wel verschil uitmaken voor mysql: 1 + 1 maakt 2 '1 + 1' is gewoon een string '1 + 1' maar dat wist je vast wel. Quote Link naar reactie
anoniem Geplaatst: 21 januari 2004 Auteur Delen Geplaatst: 21 januari 2004 [quote:9f7b666528="Wiep Corbier"]Maar neem van mij aan mijn oplossing de meest gangbare is. [/quote:9f7b666528] Neem van mij dan maar aan dat dit absoluut niet de meest gangbare manier is. En mocht dat wel zo zijn dan mogen de breinen hierachter wat mij betreft op de brandstapel en vreet ik alle sql boeken op die ik in mijn omgeving kan vinden ;) :D Een PK hoort de data te identificeren en verder geen betekenis te hebben. Deze zou nooit gewijzigd moeten kunnen worden en bij jouw voorbeeld kan ik me wel voorstellen dat dat best ooit zal moeten gebeuren. En wat dan? Toevoegen van een "echte" PK zorgt dat je daar nooit tegenaan loopt. Simpel [i:9f7b666528]shirt [/i:9f7b666528]wijzigen in [i:9f7b666528]t-shirt [/i:9f7b666528]is dan een fluitje van een cent. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen