15. november 2011 - 19:45Der er
6 kommentarer og 1 løsning
mysql implode problem ved antal over 12
her er den kode jeg prøver $sql="SELECT * FROM kursus WHERE kursus_id='".$nr."'"; $result=mysqli_query($link,$sql) or die(mysqli_error($link)); while($row = mysqli_fetch_array($result)) { $kursus_navn=$row['kursus_navn']; $kursus_beskriv=$row['kursus_beskriv']; $kursus_pris=$row['kursus_pris']; $kursus_gruppe=$row['kursus_gruppe']; $kursus_opret=$row['kursus_opret']; $kursus_lek_id=explode(',' , $row['kursus_lektion']); }
$sql="SELECT * FROM lektioner WHERE lektion_id IN(".implode(',',$kursus_lek_id).')'; $result=mysqli_query($link,$sql) or die(mysqli_error($link)); while($row = mysqli_fetch_array($result)) { $kursus_lek_nr[]=$row['lektion_id']; $kursus_lek_navn[]=$row['lektion_navn']; $kursus_lek_type[]=$row['lektion_type']; }
data i tabellen i databasen er 1,8,7,13,6,13,15,10,9,9,13,15 osv der er 22 tal, men det er kun de første 12 der kommer i arrayet til sidst de første sql kald er ok det har jeg set i udskrift men det er den sidste udtræk der driller mig nummerene i database er id nummere til en ande tabel , og det er ikke sådan at de id'er ikke eksistere , det er også krontoleret
Jeg har kikket på den kode du viser - du har, tror jeg, et antal kurser som du bevarer i tabellen kurser, og hver kursus har et antal lektioner som du bevarer i tabellen lektioner. Der er (tror jeg) en en-til-mange relation mellem kurser og lektioner. Hvert kursus har mange lektioner, hver lektion hører til et og kun et kursus. Hver lektion har en lektion_id. For at vide hvilke lektioner der hører til et kursus har du i kursus tabellen et felt hvor du viser en liste over de tilhørende kurser. Jeg gætter på noget i retning af dette:
kursus id navn lektioner 1 Engelsk 1,3,8,9,12 2 Judo 2,10,18 3 Musik 4,5,6,22,30
lektion id navn 1 Engelsk grammatik 2 Intro to judo 3 Engelsk poesi 4 Om at lytte til musik
Den sædvanlige måde at modellere en-til-mange relationer er i 'mange-tabellen' at have et felt der henviser til 'en-tabellen' i stedet for som du gør, i 'en-tabellen' at have en liste over id'er i 'mange-tabellen'. Med den gængse fremgangsmåde kan du undgå at implode og explode og lignende. Således:
kursus id navn 1 Engelsk 2 Judo 3 Musik
lektion id kursus navn 1 1 Engelsk grammatik 2 2 Intro to judo 3 1 Engelsk poesi 4 3 Om at lytte til musik
Altså lektion 1 hører til kursus 1, lektion 3 hører også til kursus 1, lektion 4 hører til kursus 3 o.s.v.
Så kan du få udskrevet de lektioner der hører for eksempel til engelsk kurset med et simpelt join query således:
SELECT k.id, k.navn, l.id, l.navn FROM kursus k JOIN lektion l ON k.id = l.kursus WHERE k.navn = 'Engelsk'
Det vil, med ovenstående data, give dette resultat 1 Engelsk 1 Engelsk grammatik 1 engelsk 3 Engelsk poesi
Din php behøver så kun at kalde en query, og du kan i php formattere udskrivningen efter behov.
Det var ikke det du spurgte om, men jeg håber det kan give dig ideer til at komme videre.
Hvis jeg har misforstået situationen, hvis for eksempel nogle lektioner kan høre til flere forskellige kurser (for eksempel at lektionen sprogstruktur hører til både engelsk og matematik, og lektionen nodelære hører således at der er en mange-til-mange relation mellem kurser og lektioner) så fortæl mere. Så prøver vi igen.
jep det er jo lige der jeg har et problem også , et lektion kan blive brugt i flere kurser men den ide med en extra tabel i databasen der indeholder relationen , eks en id, kursus,lektion hvor man under kursus skriver eks_id på kursus og id under lektion det giver så en linje for hver lektion der er i en kursus
det var da en måde at gribe sagen an på
i den tabel vil jeg jo også nem kunne læse begge veje tælle hvor mange lektioner der er til en given kursus og hvor mange gange en lektion er brugt
der er nemlig sådan at en kursus består af et antal lektioner
jeg så bare et lys i at kunne gemme lektion nummerene i et komma sepereret streng, det ville være mere overskulig
hvad mener andre der er den mest smarte løsning her ?
Altså en mange-til-mange relation mellem kurser og lektioner. Hvert kursus kan have fra 0 til mange lektioner og hver lektion kan høre til fra 0 til mange kurser.
Den gængse måde at modellere sådanne mange-til-mange relationer er at have en tabel, i dette tilfælde, for kurser, en tabel for lektioner, og en tabel for relationerne der i mellem. Så som:
kursus id navn 1 Engelsk 2 Fransk 3 Piano 4 Violin
lektion id navn 1 sprogstruktur 2 engelsk poesi 3 franske verber 4 nodelære
komma separerede lister/strenge har mange anvendelser, men relationelle database management systemer såsom mysql er optimatiserede på såkaldte normaliserede data strukturer hvor der ikke er sådanne lister. Der er mange programmerings situationer hvor for eksempel excel spreadsheets er en tilstrækkelig, og derfor bedre, løsning end mere komplicerede database systemer, men hvis man vælger at bruge en database, så bør man normalisere sine data, så man kan kan tage fuld fordel af de tilrådeværende database metoder.
Christian_Belgien i #4 skriver du lige som det er jeg skal bruge det , altså en mange til mange relation, ja jeg kan godt se den med SELECT k.navn, l.navn FROM kursus k JOIN kursus_lektion kl ON k.id = kl.kursus JOIN lektion l ON kl.lektion = l.id WHERE k.navn = 'Engelsk'
er lige metoden til mit problem lige nu , det er den vej jeg kommer til at læse mest
jeg kan godt gennemskue den , nu den er skrevet , men det var lige det at det så meget mere smart ud det med implode som jeg fandt på nettet , nu vil jeg snart sove på den , og så bruge imorgen på at programmere mig igennem dette takker til nu men lader lige denne stå åben , hvis der kommer flere ting til angående denne sql sætnig
Jamen hvis mine indlæg har været til nytte, så tillader jeg mig at oprette et svar. Når du så kommer til det næste problem, er det som regel hensigtsmæssigt at afslutte dette spørgsmål og oprette et frisk spørgsmål for det nye problem. Så vil det blive set af alle Ekspertens medlemmer (hvoraf nogle måske er klogere end jeg) og ikke kun der følger denne tråd.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.