20. juni 2011 - 17:14Der er
6 kommentarer og 1 løsning
Hent data fra tilfældig udvalgt celle?
Hej alle. Jeg prøver forgæves at hente data from en "tilfældig" valgt celle, fra et table i min database. Denne tilfældige celle, er et check på enten, jylland=y, fyn=y, sjaelland=y, oevrige=y. Fra den foregående side, vælges kun en af disse geografiske steder, og hentes på næste side med $_GET['landsdel'] funktionen. Men kan simpelthen ikke finde en løsning på et script, der vælger celle navnet, jylland, sjaellend etc. alt efter hvad der bliver klikket på.
<? $landsdel=($_GET['landsdel']);
$host="xxx"; // Host name $username="xxx"; // Mysql username $password="xxx"; // Mysql password $db_name="xxx"; // Database name $tbl_name="xxx"; // Table name mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB");
$sql="SELECT * FROM $tbl_name WHERE $landsdel='y'"; $result=mysql_query($sql);
?>
Som I kan se, prøver jeg at få WHERE $landsdel, til at hedde f.eks. jylland.
Jeg går ud fra, at din tabel indeholder et felt med navn landsdel. I de forskellige rækker i tabellen kan det felt have væerdier som Jylland, sjælland, o.s.v. En formular, som du ikke viser her, indeholder for eksempel en checkliste med værdierne jylland, sjælland, fyn, og øvrige, og når brugeren vælger en landsdel og trykker på submit, så kaldes den kode du viser med den valgte landsdel i $_GET['landsdel'].
I såfald skal din mysql forespørgsel være således:
$sql = "SELECT * FROM $tabel_name WHERE landsdel = $landsdel"; $result = mysql_query($sql);
Jamen tillykke med at du fik spørgsmålet løst. Kan jeg så bede dig lukke det (selv oprette et svar og acceptere det).
Men vil det sige at din tabel ser ud noget i denne henretning:
by fyn jylland sjælland andet Odense y n n n Skive n y n n
o.s.v.?
I såfald synes det at være en uhensigtsmæssig struktur. Normalt ville man gøre således:
by landsdel Odense Fyn Skive Jylland
Det gør det mere oversigteligt og nemmere at formulere sql forespørgsler, især når det kommer til join forespørgsler der involverer adskillige tabeller.
Lad mig tage et eksempel med, som mit script også kunne bruges til, at jeg vil finde en Legetøjsbutik butik.
Jeg kan nu vælge hvilken landsdel, jeg befinder mig på, f.eks. Jylland.
Min database ser således ud:
navn jylland sjaelland oevrige osv. Fætter BR y y n Toys'r'us n y y
Derved når jeg så vælger Jylland, får jeg i dette eksempel Fætter BR vist, og ikke Toys'r'us. Og hvis jeg havde valgt sjaelland, ville jeg få begge legetøjsbutikker. Dermed kan jeg ikke se en anden struktur end denne, i mit tilfælde.
Jamen det har du muligvis ret i, at det er en tilstrækkelig struktur i dit tilfælde, hvis du ikke har en stor applikation med tons af data der skal kunne alt muligt.
Men standard løsningen i relationelle databaser på sådanne mange-til-mange relationer (hver butikskæde kan være i flere landsdele og hver landsdel kan have flere butikskæder) er at lave tre tabeller, i dette tilfælde en med butikskæder, en med landsdele, og en med relationerne mellem dem.
Butikskæde id, navn, kontaktperson, og-så-videre 1 FætterBR Ole Høg abc 2 Toys'r'us Kaj Due def
Og når du så vil finde navnet på butikskæderne i Jylland går det således:
SELECT b.navn FROM Butikskæde b JOIN Butikskæder_i_landsdele bl ON b.id = br.butikskæde JOIN Landsel l ON br.landsdel = l.id WHERE l.navn = 'Jylland'
Det er som sagt 'overkill' for simple tilfælde, men hvis man skal gå videre og for eksempel har brug for at liste hver enkelt forretning med adresse, indehaver, email, o.s.v, og stadig har brug for en oversigt over hvilke kæder der er representeret i hvilke landsdele, så kommer den relationelle struktur på sin plads.
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.