Pangaea Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Litt dårlig formulert topic kanskje, menmen. Jeg har en mange-til-mange relasjon, tre tabeller med koblinger til en i midten, som vanlig er. Jeg lurer på hvordan dette kan løses i php. Jeg driver å lager en side om AC/DC, og nå skal jeg til på lineup. En lineup har selfølgelig flere medlemmer. Så jeg tenkte det slik at når jeg har fylt inn en medlem på lineup'en, skal en linje til "sprette opp". Går dette an å løse med php? Hvordan gjør jeg det? For å tegne et lite bilde, så har jeg "member", "instrument" og "lineup"; disse tre tabellene har relasjoner til "member_on_lineup". Har tenkt å bruke en lignende løsning for flere funksjoner, så håper dette går an å gjøre. Håper noen forstod hva jeg mente her... Lenke til kommentar
Hazno Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Hm.. Beklager, men var vanskelig å skjønne hva du mente.. Du har vel ikke en url til siden, eller til evt. et screenshot fra siden? Lenke til kommentar
???????? Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Løse det med PHP? Antar at det er en SQL database og da kan du sende spørringer fra PHP, men du må løse det med SQL dersom det er en SQL database. Forklar hva du vil hente fra databasen og kom gjerne med et eksempel. En til mange burde ikke være noe problem - det er vanlig, det er mange til mange som gir problemer. Lenke til kommentar
Beisfjord Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Hva mener du med at linje til skal sprette opp? Lenke til kommentar
Pangaea Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Jeg mener at når jeg går inn på siden er det en "linje" der. Hadde tenkt å bruke "dropdown" menyer. Så i dette eksempelet velger man medlem og instrument (måtte skille dette pga små forandringer en sjelden gang...). Når man har gjort dette ville jeg at en "linje" til skulle bli lagd. Alternativet er at når man går inn på siden (fx "Add Lineup"), blir 5-6 linjer (en linje per bandmedlem) lagd. Usikker på om/hvordan dette kan gjøres siden jeg ikke har gjort det før. Noen som forstod litt mer nå? Lenke til kommentar
dostojevski Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Er fremdeles ikke helt sikker på hva du egentlig spør etter (er ikke så stø på musikersjargong, hva er en "line up"?). Men slik jeg forstår deg skal du altså kjøre følgende scenario: - Velg en artist -> liste/dropdown-meny over instrumenter denne har spilt generers - Velg instrument -> liste over alle plater denne artisten har spilt dette instrumentet med hvilke andre artister som har spilt hva genereres og vises. Korrekt? I såfall er dette forholdsvist trivielt: - Først henter du ut alle artister og genererer en listeboks. - Når denne er valgt bruker du ID fra den til å finne alle instrumenter vedkommende har spilt. - Når instrument er valgt kjører du to spørringer og viser resultatet. (Det kan gjøres mere fancy, men dette blir mest oversiktlig. Se evt. nedenfor.) De siste spørringen blir da noe slikt som (kan ikke sjargongen, så jeg bruker navn jeg tror er lett forståelige): Først finner vi de platene vedkommende har spilt på. SELECT Plate_id FROM Besetning WHERE musiker_id=musiker_id_fra_skjema AND instrument_id=instrument_id_fra_skjema Deretter spør vi om besetningen på disse platene. SELECT Plate.Tittel, Medlem.Navn, Instrument.Instrumentnavn FROM Plate, Medlem, Instrument, Besetning WHERE Besetning.plate_id=plate_id_fra_forrige_spørring AND Plate.id=Besetning.plate_id AND Medlem.id=Besetning.medlem_id AND Instrument.id=Besetning.instrument_id Som sagt det ER mulig å gjøre dette i en spørring ved hjelp av aliasser. Men for oversiktens skyld er det like greit å kalle to spørringer. Den siste vil da returnere en liste hvor hver rad inneholder: Platetittel, Medlemsnavn, Instrument. Denne er det greit gjort å formatere som du vil i PHP. Hvis du vil bruke en enkelt spørring kan du prøve (med forbehold om at jeg er litt rusten på SQL): SELECT Plate.Tittel, Medlem.Navn, Instrument.Instrumentnavn FROM Plate, Medlem, Instrument, Besetning AS Besetning_1, Besetning AS Besetning_2 WHERE Plate.id=Besetning_1.plate_id AND Medlem.id=Besetning_1.medlem_id AND Instrument.id=Besetning_1.instrument_id AND Besetning_1.plate_id=Besetning_2.plate_id AND Besetning_2.medlem_id=medlem_id_fra_skjema AND Besetning_2.instrument.id=instrument_id_fra_skjema Som sagt er litt rusten på dette, så er ikke 100% sikker på om denne vil funke... Var dette riktig, eller misforsto jeg helt nå? Lenke til kommentar
Pangaea Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 (endret) Tror du misforsto litt. Tror jeg skal klare SQL-biten. Lineup er hvem spilte i bandet på dette tidspunktet, besetning er sikkert et greit norsk ord. Det jeg vil her, er å lage lineup'ene. Når skal lage en lineup, legger jeg inn fx et bilde av denne lineup'en, litt info, og muligens fra-til dato denne lineup'en eksisterte. Så vil jeg legge inn medlemmene på akkurat denne lineup'en med hvilke instrument de spilte her (En medlem har spilt flere instrumenter i forskjellige lineups, så kunne ikke legge instrument direkte i medlem tabellen). Jeg har en tabell med instrument. Disse setter jeg inn i en dropdownboks. Det samme gjør jeg med medlemmene i bandet. Så når jeg skal legge til medlemmene på lineup'en, får jeg opp en dropdownboks med alle medlemmene fra medlemstabellen, og alle instrumentene i en ny dropdownboks. Når jeg har valgt fx "Medlemsnavn" og "Lead Guitar", vil jeg at en ny linje hvor jeg kan velge en ny medlem med instrument skal blir lagd nedenfor den medlemmen jeg akkurat skrev inn. Med medlemmer kunne jeg bare lagd fx 5 linjer, men når jeg skal lage album med sanger, blir det værre. De forandrer seg ganske mye. Og når jeg skal legge inn bootlegs blir det enda værre. Derfor hadde det vært topp om det gikk an å gjøre noe slikt. Går vel ikke an uten en OK knapp per medlem (linje) eller noe sånt, men håper det er løselig. Et annet alternativ kan jo være å først velge hvor mange "linjer" man skal ha på denne lineup'en/CDen, og så blir de tegnet opp. Alle linjene må vel også ha ulike navn så må vel legge inn en $i på slutten av navnet regner jeg med. Fx "medlem".$i og "instrument".$i Håper noen kan hjelpe meg litt med dette her. Hadde vært kjempeflott om det gikk an å få til Bilde med et eksempel av hvordan jeg har tenkt det Endret 27. mai 2004 av Pangaea Lenke til kommentar
ZoRaC Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 Alle linjene må vel også ha ulike navn så må vel legge inn en $i på slutten av navnet regner jeg med. Fx "medlem".$i og "instrument".$i Bare bruk $instrument[] og medlem[]. Så kjører du en "$linjer=count($instrument);" før du legger den inn i SQL. Hvordan du skal løse problemet med å få en ekstra "linje" når man har valgt, vet jeg ikke. Må vel bruke javascript da...? Alternativet er at man på forhånd velger hvor mange man skal ha... Lenke til kommentar
Pangaea Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Ikke kjempebrukervennlig å måtte velge antall medlemmer osv på forhånd, men jeg velger den løsning for nå vertfall. Håper jeg er på rett veg her... $num = htmlspecialchars(mysql_escape_string(trim($_POST['num']))); SQL: $query = "INSERT INTO acdc_lineup (picture, notes, from_d, from_m, from_y, to_d, to_m, to_y) VALUES ('$picture', '$notes', '$from_d', '$from_m', '$from_y', '$to_d', '$to_m', '$to_y')"; $result = mysql_query($query) or die ("Could not execute query.".mysql_error()); $lineup_id = mysql_insert_id(); $i = 0; while($i < $num) { $instrument_id = $_POST['instrument'.$i]."<br/>"; $member_id = $_POST['member'.$i]."<br/>"; $i++; $query = "INSERT INTO acdc_member_on_lineup (lineup_id, member_id, instrument_id) VALUES ('$lineup_id', '$member_id', '$instrument_id')"; $result = mysql_query($query) or die ("Could not execute query.".mysql_error()); } PHP: $i = 0; while($i < $num) { echo "<select name=\"instrument$i\">"; instrument($instrument_id); echo "<select name=\"member$i\">"; member($member_id); $i++; } Har lagt navnet utenfor funksjonen fordi jeg trenger unikt navn på hver av de. Kunne vel også tatt det i et argument til da, menmen. Ser det noenlunde fornuftig ut? Lenke til kommentar
Pangaea Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 (endret) Nå forstår jeg absolutt ingenting igjen. argh instrument() funsjonen: function instrument($instrument_id) { $result = mysql_query("select * from acdc_instrument order by instrument"); //echo "<select name=\"instrument\">"; echo "<option value=\"Select an instrument\">Select an instrument</option>"; echo "<option value=\"--------------\">--------------</option>"; while ($record = mysql_fetch_assoc($result)) { if($record['instrument_id'] == $instrument_id) { echo "<option value=".$record['instrument_id']." selected>".$record['instrument']."</option>"; } else { echo "<option value=".$record['instrument_id'].">".$record['instrument']."</option>"; } } echo "</select>"; } legge instrument_id til array $i = 0; while($i < $num) { $instrument[] = $_POST['instrument'.$i]; $member[] = $_POST['member'.$i]; $i++; echo $instrument[0]; } vise det som er i dropdownboksen echo "<select name=\"instrument0\">"; instrument($instrument[0]); Det merkelige er at jeg echoer ut arrayen, og får opp tall, dropdownboksen klarer ikke å skrive ut det den skal. Legger jeg inn et tall til arrayen blir det rett. Men det burde jo funke siden der allerede ligger et tall i arrayen. Forstår fint lite her ass... Noen som ser hva som er galt? Edit: Vet ikke hva som var galt, men nå funker det vertfall Endret 27. mai 2004 av Pangaea 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å