![]() ![]() ![]() ![]() |
||||
<< Tilbage DatabaseforespørgslerNu skal vi kigge på hvordan man fra php kan trække data ud af en MySQL Database. MySQL er et enormt kraftfuldt sprog med masser af muligheder, så vi nøjes med at skrabe overfladen her, og få det mest grundlæggende på plads. Det meste af denne tutorial handler om selve MySQL-kommandoerne, og ikke så meget om hvordan man kombinere det med php (hvilket vi kigger på til sidst).Første eksempelI dette eksempel trækker vi alle rækker fra tabellen "personer" ud: SELECT fornavn,efternavn FROM personer Når vi vil have noget data ud fra databasen, så starter kommandoen altid med SELECT. Når vi starter kommandoen med SELECT ved den altså at vi er igang med at trække noget ud.Efterfølgende kommer navnene på de felter vi skal bruge. Jeg har opridelig flere felter i min tabel, men her ønsker jeg kun at bruge "fornavn" og "efternavn". Feltnavnene er adskilt med komma. Til slut har vi FROM personer, som fortæller hvorfra vi ønsker at hive de foranstående felter ud. "personer" er navnet en tabel jeg har oprettet i min database. Læg mærke til at der bruges en blanding mellem store og små bogstaver. De ord der står med stort er såkaldte reserverede ord i MySQL, mens de små er navnene på dine felter, tabeller, værdier og den slags. Det gør man for at det skal være nemmere at overskue, men er derfor ikke tvingende nødvendigt. Ovenstående kommando giver mig følgende resultat: +---------+-----------+ | fornavn | efternavn | +---------+-----------+ | Anders | And | | Anders | Fogh | | Jesper | Langballe | | George | Bush | +---------+-----------+Den hiver simpelthen alle mine rækker ud. Senere ser vi på hvordan vi rent faktisk får fat i dette resultat vha. php. En smart måde at hive samtlige felter ud af databasen på, er ved at benytte en stjerne (*). Så slipper man for at skulle skrive navnene på felterne manuelt. Eksempel: SELECT * FROM personer Resultat: +----+---------+-----------+--------+ | id | fornavn | efternavn | status | +----+---------+-----------+--------+ | 1 | Anders | And | dater | | 2 | Anders | Fogh | gift | | 3 | Jesper | Langballe | ukendt | | 4 | George | Bush | gift | +----+---------+-----------+--------+ Specificer forespørgslen med WHEREIndtil nu har vi hevet alle de 4 rækker ud som min tabel består af. Men man kan selvfølgelig også opstille nogle betingelser som skal være opfyldt, før en række bliver taget med. I mit tilfælde kunne det f.eks. være rækker hvor fornavnet starter med "A", eller hvor status-feltet indeholder noget bestemt. Dette gør man på følgende måde: SELECT * FROM personer WHERE status='gift' I princippet siger det jo sådan set sig selv. Man bruger WHERE til at opstille nogle kriterier - i dette tilfælde at status-feltet skal være lig med "gift". Sådan en MySQL kommando kan læses som en almindelig sætning, og man vil forstå hvad meningen er. Resultat:+----+---------+-----------+--------+ | id | fornavn | efternavn | status | +----+---------+-----------+--------+ | 2 | Anders | Fogh | gift | | 4 | George | Bush | gift | +----+---------+-----------+--------+Man kan selvfølgelig også uvide med flere kriterier, som skal være opfyldt på samme tid: SELECT * FROM personer WHERE status='gift' AND fornavn='Anders' Vi bruger altså AND imellem hver. Ovenstående ville hive rækker ud hvor status-feltet er lig "gift" og fornavnet er lig "Anders". Man kan også komme ud for at man kun ønsker én af sine betingelser opfyldt, og det gør man ved at benytte OR i stedet for AND: SELECT * FROM personer WHERE fornavn='Anders' OR status='gift' Sorter resultat med ORDERHenter man mange poster/rækker ud fra sin tabel er det meget nyttigt at kunne sortere dem (f.eks. i alfabetisk orden, eller ud fra dato). Eksempel: SELECT * FROM personer ORDER BY efternavn Kommandoen siger igen sig selv - vi hiver alle felter (*) ud fra tabellen personer, og sortere efter feltet "efternavn" med ORDER BY. Efter ORDER BY skal man altid have navnet på det felt i tabellen, som man ønsker at sortere ud fra.Resultat: +----+---------+-----------+--------+ | id | fornavn | efternavn | status | +----+---------+-----------+--------+ | 1 | Anders | And | dater | | 4 | George | Bush | gift | | 2 | Anders | Fogh | gift | | 3 | Jesper | Langballe | ukendt | +----+---------+-----------+--------+Man kan også komme ud for at skulle vende resultatet rundt, så det bliver faldende i stedet for stigende og omvendt. Som standard sortere den ASC (ascending - dvs. stigende), hvilket betyder at 1 kommer før 2 og a kommer før b. Ønsker man det omvendte, så skriver man DESC efter navnet på sit feltet. DESC betyder descending (faldende), hvor 2 kommer før 1 og b kommer før a. Eksempel: SELECT * FROM personer ORDER BY efternavn DESC Læg iøvrigt mærke til at vi ikke har brugt WHERE i de to ovenstående eksempler. Det er selvfølgelig kun valgtfrit, men husk at WHERE altid skal ind før ORDER BY, så det kunne f.eks. se sådan ud: SELECT * FROM personer WHERE fornavn='Anders' ORDER BY efternavn Afgræns med LIMITDet er ikke altid vi bare ønsker at hive alle rækker ud, som eventuelt opfylder et par betingelser. Hvis man på sin side f.eks. har en lille nyhedsboks, så kunne det være nyttigt kun at hive de 10 nyeste fra databasen ud. Det kan man bruge LIMIT til. Eksempel: SELECT * FROM personer ORDER BY id DESC LIMIT 2 Først fortæller vi den at den skal sortere faldende ud fra feltet "id" (ORDER BY id DESC). Og dernæst smider vi LIMIT 2 i enden, som fortæller den at vi kun ønsker at hive 2 rækker ud. Resultat bliver følgende:+----+---------+-----------+--------+ | id | fornavn | efternavn | status | +----+---------+-----------+--------+ | 4 | George | Bush | gift | | 3 | Jesper | Langballe | ukendt | +----+---------+-----------+--------+Det er altså en måde hvorpå man kan finde frem til de 2 nyeste rækker i databasen. Brug PHP til at få fat i resultatetIndtil videre har vi beskæftiget os med ren MySQL, men nu skal vi se på hvordan resultatet af MySQL-forespørgslen kan opfanges vha. php. Vi springer lige ud i det med et eksempel:Kode:
Resultat:
I linje 2 inkludere jeg filen, hvor jeg connecter til min database. Man kan selvfølgelig ikke begynde at trække data ud, uden at have oprettet forbindelse til databasen. I linje 4 fyrer vi selve MySQL-kommandoen af, og gemmer resultatet i variablen $query I linje 5 starter en vi løkke som køre alle de fundne rækker igennem. mysql_fetch_assoc returnere et array, hvor værdien af de enkelte felterne kan fås ved at skrive $row['navn_på_felt']. Hvis du ved at forespørgslen ikke returnerer flere rækker, er der ingen grund til at bruge en while løkke. Så kan man i stedet gøre det på følgende måde: Kode:
Resultat: -
Eftersom jeg bruger LIMIT 1 ved jeg at der maksimalt kommer én række ud, og så behøver jeg ikke bruge "while".
|