Gå til innhold

Anbefalte innlegg

- 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 av eeerlend
Lenke til kommentar
Videoannonse
Annonse

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

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 av blackbrrd
Lenke til kommentar
  • 2 uker senere...

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

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
  • 1 måned senere...
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
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
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
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 :D

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
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 av kaffenils
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...