eeerlend Skrevet 1. november 2007 Del Skrevet 1. november 2007 (endret) - Hjelp til spørring php/mysql Hvordan kan jeg løse denne? Lister først opp databasene: Personer Personid (prim. key, auto inc.) Fornavn Etternavn Events Eventid (prim. key, auto inc.) Dato Beskrivelse PersonerEvents Personid Eventid Status Case: Her skal jeg, når jeg oppretter en ny Event i Events sette alle personid fra Personer inn i PersonerEvents, med status = 1 og eventid samme som eventen i Events jeg opprettet. Trenger altså hjelp til bare spørringen. (Form og alt det der har jeg laget/finner jeg ut av selv) Tusen takk for alle bidrag! erlend Endret 1. november 2007 av eeerlend Lenke til kommentar
roac Skrevet 1. november 2007 Del Skrevet 1. november 2007 Dette er så dårlig databasedesign at jeg ikke vil svare på det direkte spørsmålet ditt, men snare komme med informasjon om hvordan du BØR løse dette: Du oppretter en tuppel (aka rad) i PersonEvents når det skjer noe med den personen i forhold til eventen, f eks når en person melder seg på et seminar, og så ser du på bruk av forskjellige typer joins (da spesielt left outer og inner) for å gjøre de spørrigene du måtte ha behov for når du skal hente ut data. Innsetting skal være en lek. F eks: select * from personer p left outer join person_events pe on (p.personid = pe.personid) where ifnull(pe.eventid,3) = 3 for å liste ut alle personer og deres forhold til eventet med i 3. Håndtering av null med ifnull (heter det vel i MySQL) er soleklart å anbefale. Lenke til kommentar
blackbrrd Skrevet 1. november 2007 Del Skrevet 1. november 2007 (endret) Kan man ikke like gjerne skrive: SELECT * FROM personer p LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 Personlig synes jeg det er litt lettere å lese, du slipper å skjønne at hvis pe.eventid er null sammenligner den 3 med 3, ellers sammenligner den pe.eventid med 3... Alternativt kan man også skrive, men det er også litt tungvint SELECT * FROM personer p LEFT JOIN person_events pe ON p.personid = pe.personid WHERE pe.eventid IS NULL OR pe.eventid = 3 Endret 1. november 2007 av blackbrrd Lenke til kommentar
eeerlend Skrevet 12. november 2007 Forfatter Del Skrevet 12. november 2007 Takk for bidrag, men kan noen forklare koden under steg for steg? Har prøvd å lært meg left join/inner join/join generelt, men faller av på samme sted hver gang (pe? p.personid?)... SELECT * FROM personer p LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 Lærer jeg meg logikken i dette, er jeg svært takknemlig:) Lenke til kommentar
blackbrrd Skrevet 12. november 2007 Del Skrevet 12. november 2007 Det som blir brukt er aliaser, så når jeg har skrevet SELECT * FROM personer p Kan jeg etterpå referere til personer med aliaset p Tilsvarende blir det i linjen under: LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 vi oppretter aliaset pe for person_events, så jeg kan skrive pe istedetfor person_events i resten av spørringen. Hvis jeg skulle skrevet spørringe uten aliaser hadde den sett slik ut: SELECT * FROM personer LEFT JOIN person_events ON personer.personid = person_events.personid AND person_events.eventid = 3 Lenke til kommentar
eeerlend Skrevet 18. desember 2007 Forfatter Del Skrevet 18. desember 2007 Det som blir brukt er aliaser, så når jeg har skrevet SELECT * FROM personer p Kan jeg etterpå referere til personer med aliaset p Tilsvarende blir det i linjen under: LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 vi oppretter aliaset pe for person_events, så jeg kan skrive pe istedetfor person_events i resten av spørringen. Hvis jeg skulle skrevet spørringe uten aliaser hadde den sett slik ut: SELECT * FROM personer LEFT JOIN person_events ON personer.personid = person_events.personid AND person_events.eventid = 3 Ahh.. Takk! Der løsnet det for meg:) Lenke til kommentar
kaffenils Skrevet 18. desember 2007 Del Skrevet 18. desember 2007 Kan man ikke like gjerne skrive: SELECT * FROM personer p LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 Personlig synes jeg det er litt lettere å lese, du slipper å skjønne at hvis pe.eventid er null sammenligner den 3 med 3, ellers sammenligner den pe.eventid med 3... Agree. Dette har vi diskutert før hvis du husker. Lenke til kommentar
roac Skrevet 18. desember 2007 Del Skrevet 18. desember 2007 Kan man ikke like gjerne skrive: SELECT * FROM personer p LEFT JOIN person_events pe ON p.personid = pe.personid AND pe.eventid = 3 Personlig synes jeg det er litt lettere å lese, du slipper å skjønne at hvis pe.eventid er null sammenligner den 3 med 3, ellers sammenligner den pe.eventid med 3... Agree. Dette har vi diskutert før hvis du husker. Tji-hi. Velkommen til 1989 eller deromkring Lenke til kommentar
kaffenils Skrevet 19. desember 2007 Del Skrevet 19. desember 2007 Tji-hi. Velkommen til 1989 eller deromkring Du er tilgitt. Vet at det sikkert bare er lettelsen over å være ferdig med eksamen som gjorde deg litt sløv Lenke til kommentar
roac Skrevet 19. desember 2007 Del Skrevet 19. desember 2007 Tji-hi. Velkommen til 1989 eller deromkring Du er tilgitt. Vet at det sikkert bare er lettelsen over å være ferdig med eksamen som gjorde deg litt sløv Vel, det var vel blackbrrd og ikke jeg som kom med den spørringen, jeg kom bare med en liten kommentar om hvilket årtiende den hører hjemme i Lenke til kommentar
kaffenils Skrevet 19. desember 2007 Del Skrevet 19. desember 2007 (endret) Vel, det var vel blackbrrd og ikke jeg som kom med den spørringen, jeg kom bare med en liten kommentar om hvilket årtiende den hører hjemme i Regner med det er den andre spørringen til blackbrrd du tenker på da. Den første er jo riktig. Endret 19. desember 2007 av kaffenils Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå