15. juli 2007 - 14:56Der er
20 kommentarer og 1 løsning
Hente data fra én i forhold til en anden tabel, INNER JOIN måske?
Det her er for meget for mig :D
Der hentes følgende fra første tabel: shop_content varegruppeID varenr beskrivelse dimension enhed pris
Fra anden tabel "shop_surface_dd" skal jeg så bruge alle data der har samme "varenr" som i tabellen ovenfor.
Jeg tænkte på at bruge følgende og smide en ny $query ind midt i while sætningen, men tror måske det er lidt skidt at lave så mange kald til db´en, det må kunne gøre smartere:
$query1 = mysql_query("SELECT * FROM shop_content where varegruppeID=" . $_GET["varegruppeID"] . "")or die(mysql_error());
Hvis du vil undgå mange kald til db'en, kan det godt gøres i et kald - men det tror jeg ikke er en fordel her. Jeg tror du skal holde det, som det er nu...
Din forklaring er måske lidt kryptisk, men kunne det være:
SELECT sc.varegruppeID, sc.varenr, sc.beskrivelse, sc.dimension, sc.enhed, sc.pris FROM shop_content AS sc INNER JOIN shop_surface_dd AS ssd ON sc.varenr = ssd.varenr WHERE sc.varegruppeID = intval($_GET["varegruppeID"])
Så vælger han jo ikke noget fra ssd - og så kan join være ligemeget. Hvis du gerne vil have alt fra surface-tabellen, så kan du bruge group_concat, og lave group by på varenr... ikke det pæneste i verden, men så er det kun en query, og så kan du splitte over hvad du group_concat'ede på og hive surfaces ud den vej rundt :)
ok jeg prøver lige at beskrive hvad jeg vil med ord og ikke kode blandet ind i det, jeg kunne heller ikke selv lige overskue det hele da jeg skrev spørgsmålet =)
Jeg har en række produkter i shop_content. Hele problemet er at de produkter KAN have forskellige overflader/farver og man skal så kunne vælge imellem de gældende farver til hvert produkt. Derfor har jeg lavet en tabel der holder styr på hvilke overflader/farver de forskellige produkter kan have. Den hedder shop_surface_dd (dd for dropdown smart ikke =)
dvs. det eneste der skal i den dropdown menu er overfladerne/farverne som i shop_surface_dd hedder "surfacenavn" (ved godt jeg blander lidt sprog sammen)
Dvs. jeg henter en vare fra shop_content, den vare har så et varenr som jeg skal bruge for at hente de tilhørende overflader/farver fra shop_surface_dd tabellen.
Herunder skriver jeg lige de to forskellige tabel strukturer:
shop_content: id varegruppeID (denne bruges bare til at inddele varerne i forskellige kategorier) varenr beskrivelse dimension enhed pris prisenhed
shop_surface_dd: id varenr farvekode (en bestemt kode for hver farve) surfacenavn (bare navnet på en farve)
Håber I forstår hele idéen nu =)
Men jeg er ikke helt vildt inde i inner join så I må lige bære over med mig.
Et resultat sæt har kun to dimensioner. Det består af en række felter (fastlåst antal) og en række rækker (variabelt antal). Du vil jo gerne have 2 ekstra dimensioner - du vil for hver række have yderligere et resultatsæt med felter og rækker, som angiver den enkelte surface. Det kan man ikke - det er en helt grundlæggende sql-konsekvens.
FORM er vist ikke nødvendigt, men nogle input felter skifter funktion alt efter om de er e i en form eller ej, så lad den bare være, med mindre det giver deciderede fejlmuligheder :)
Og du kan godt lave en INNER JOIN, men ikke for at optimere - blot for at ændre lidt :)
hehe ok,.. well jeg prøver mig frem =) tak so far, jeg venter lige med at lukke til jeg er sikker på om det virker nemmere at snakke videre i samme Q =)
uhm det er jo lige det =) Altså jeg skal jo bruge varenr fra shop_content til at finde de rigtige overflader/farver fra shop_surface_dd. Derfor håbede jeg at man kunne gøre noget lignende. Hvordan skal jeg ellers få fat i variablen varenr fra den gældne vare der bliver vist i denne while($row = mysql_fetch_array($query1))?
Siger du man kan skrive det som inner join oxo? Jeg kunne godt tænke mig at se det som inner join hvis det ikke tager dig aaalt for lang tid at skrive =)
Altså for at få det hele fra alle tre tabeller, kan du:
$query1 = mysql_query(" SELECT sc.varenr, sc.beskrivelse, sc.dimension, sc.enhed, sc.prisenhed, sc.pris, sc.id, GROUP_CONCAT(ss.surfacenavn, ",") AS surfaces FROM shop_content AS sc LEFT JOIN shop_surface_dd AS ss ON sc.varenr = ss.varenr WHERE sc.varegruppeID='" . $_GET["varegruppeID"] ."' GROUP BY sc.varenr, sc.beskrivelse, sc.dimension, sc.enhed, sc.prisenhed, sc.pris, sc.id )or die(mysql_error());
Men om det er en fordel ved jeg ikke. Bruger du overhovedet row2 til noget? Jeg kunne ikke se den, så jeg har ikke taget den med, men hvis du gør, så skal du også innerjoin'e med den.
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.