Gå til innhold

[LØST] Hjelp til enkel PHP/MySQL, hente info fra 2 tabeller og slå de sammen.


Anbefalte innlegg

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 av magnusalex
Lenke til kommentar
Videoannonse
Annonse

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

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

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! :D

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...