magnusalex Skrevet 3. november 2009 Del Skrevet 3. november 2009 (endret) Hei! Håper på å få hjelp med en liten kode jeg har jobbet med i dag. Koden brukes i Zen Cart, og har følgende funksjon: En nettbutikk selger varer som passer til mange forskjellige andre produkter, feks. en lader til et batteri. Laderen kan brukes til mange forskjellige batterier. På informasjonssiden skal det komme opp en funksjon som viser hvilke andre produkter den kan brukes til. Har kommet "godt på vei", men én vesentlig funksjon mangler. Her er koden jeg er ferdig med, som også fungerer på siden: <?php $result = mysql_query("SELECT * FROM products_to_categories WHERE products_id=$current_category_id") or die(mysql_error()); while($row = mysql_fetch_array( $result )) { echo $row['categories_id']; echo ", "; } ?> Liten kode i grunn, men den gir et brukbart resultat som ser omtrent slik ut: 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2095, Disse tallene er kategori-id i Zen Cart. (Hvert produkt har en egen eller flere kategorier tilknyttet). Jeg skulle gjerne ha byttet ut de tallene med klartekst, som hentes fra en database. Databasetabellene er lagt opp slik: products_to_categories inneholder to kolonner, en med produkt id, og en med kategori id. Denne viser også hvilke produkter som passer sammen, og er også tabellen jeg har brukt for å hente informasjonen i koden ovenfor. categories_description inneholder den samme kategori id som vises i resultatstrengen, pluss navnet på kategorien i klartekst. Disse to skulle jeg gjerne matchet sammen, slik at resultatstrengen blir feks: Produkt 1, Produkt 2, Produkt 3.... osv Forventer ikke at noen skal skrive en ferdig kode til meg, men er det noen som kan tipse meg om rette vei for å få dette til, setter jeg pris på det! Har forsøkt å forklare etter beste evne, men om det er noe uklart - skal jeg forsøke på nytt Dersom noen er villige til å hjelpe med å få koden ferdig, kontakt meg gjerne på PM, så blir vi enige om en dusør/lønn for arbeidet. Tusen takk for alle svar! Endret 4. november 2009 av magnusalex Lenke til kommentar
zandzpider Skrevet 3. november 2009 Del Skrevet 3. november 2009 ta en titt på mysql join \ left join etc http://dev.mysql.com/doc/refman/5.0/en/join.html Lenke til kommentar
magnusalex Skrevet 3. november 2009 Forfatter Del Skrevet 3. november 2009 Takk for tilbakemelding Jeg har tittet litt på både vanlig join og left join, men det virker som om det ikke passer til funksjonen jeg vil ha... Jeg skal ha noe enkelt som "2081" byttes ut med "Produkt 1". I det endelige resultatet. Med join får jeg det litt annerledes, for eksempel slik: "2081 - Produkt 1". Dersom jeg fjerner variablene for nummeret, forsvinner begge verdiene... Er jeg på bærtur? Lenke til kommentar
zandzpider Skrevet 3. november 2009 Del Skrevet 3. november 2009 SELECT * FROM products_to_categories LEFT JOIN categories_description ON categories_description.catID = products_to_categories.prodID noe i den duren? forrandre på ID navna i left joinen bare så burde det funke.. så kan du legge til WHERE etc som du ønsker. Lenke til kommentar
magnusalex Skrevet 4. november 2009 Forfatter Del Skrevet 4. november 2009 Sliter litt med å få denne til å fungere, egentlig... Koden er nå slik: $query = "SELECT * FROM products_to_categories WHERE products_to_categories.products_id=$current_category_id LEFT JOIN categories_description ON products_to_categories.categories_id = categories_description.categories_name"; $result = mysql_query($query) or die(mysql_error()); echo $result Til slutt er det jo categories_description.categories_name jeg vil vise... men alt den resulterer i er en syntax error. Jeg forsøker å forklare på nytt hva jeg vil, i tilfelle noe er uklart: Jeg har to tabeller. De ser slik ut: products_to_categories +-------------+----------------+ | products_id | categories_id | +-------------+----------------+ | 11 | 1 | | 12 | 3 | | 13 | 4 | | 14 | 5 | +-------------+----------------+ categories_description +---------------+-----------------+ | categories_id | categories_name | +---------------+-----------------+ | 1 | En | | 2 | To | | 3 | Tre | | 4 | Fire | +---------------+-----------------+ Når jeg er inne på et produkt i nettbutikken, vil jeg få variabelen $current_category_id fra nettstedet, som vi finner igjen i tabellen som products_id. Så er det slik at jeg vil matche opp hvilken kategori den passer til, categories_id. Den finner vi i begge tabellene. Følgende kode fungerer til dette, og setter opp en kommaseparert liste med categories_id i tallform: $result = mysql_query("SELECT * FROM products_to_categories WHERE products_id=$current_category_id") or die(mysql_error()); while($row = mysql_fetch_array( $result )) { echo $row['categories_id']; echo ", "; Som man kan se, så henter denne kun ut data fra den første tabellen. Neste steg er å bytte ut categories_id med categories_name fra tabell nummer 2, slik at output blir En, To, Tre, Fire osv... Dette er det jeg ikke får til... Setter stor pris på all hjelp! Lenke til kommentar
OyvindN Skrevet 4. november 2009 Del Skrevet 4. november 2009 Hva med istedet å skrive: SELECT categories_name FROM products_to_categories AS p, categories_description AS c WHERE p.categories_id = c.categories_id AND p.products_id = "aktuell produktid" Da skal du få kategorinavn på aktuell produktid. Lenke til kommentar
magnusalex Skrevet 4. november 2009 Forfatter Del Skrevet 4. november 2009 Det funka fjell! Tusen takk Dersom det er av interesse for flere som bruker ZenCart å ha en lignende funksjon, her er den endelige koden - med resultatene i en dropdownmeny: <?php $query = "SELECT categories_name FROM products_to_categories AS p, categories_description AS c WHERE p.categories_id = c.categories_id AND p.products_id = $current_category_id"; $result = mysql_query($query) or die(mysql_error()); echo "<form><select>"; while($row = mysql_fetch_array( $result )) { echo "<option>"; echo $row['categories_name']; echo "</option>"; } echo "</form></select>"; ?> Dersom den skal brukes i en ZenCart template, må den innsluttes med <echo> og </echo> tagger. Takk for hjelpen begge to! Lenke til kommentar
zandzpider Skrevet 5. november 2009 Del Skrevet 5. november 2009 avslutte </select> før du avslutter </form> vel? Lenke til kommentar
magnusalex Skrevet 5. november 2009 Forfatter Del Skrevet 5. november 2009 Ja, det er sant. Takk for tipset 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å