Gå til innhold

Prob med MySQL-syntax (tre tabeller kobles sammen og grupperes)


Anbefalte innlegg

Jeg sliter veldig med å få denne mysql-spørringen til å fungere som jeg vil og håper det er noen lyse hoder der ute som kan hjelpe meg nå da jeg har litt tidspress :s

 

Slik ca ser tabellene ut.

 

id

cat_id

undercat_id

name

price

description

 

id

name

description

active

 

id

category_id

name

style

active

 

I produkt.php ønsker jeg å liste opp alle produkter som har ønsket kategori-ID (f. eks produkt.php?catid=1).

I hver kategori er produktene delt opp i underkategorier og ønsker dem gruppert i underkategoriene.

Noen produkter har ikke underkategori i det hele tatt (NULL i db) og noen få har egen beskrivelse.

(se eksempel)

 

MySQL-kommandoen jeg bruker:

SELECT * FROM product LEFT JOIN (categories, undercat)
ON (product.cat_id=categories.id AND product.undercat_id=undercat.id) 
WHERE product.cat_id = '. $_GET["catid"].' GROUP BY product.undercat_id

 

 

Dette er slik jeg vil ha det, fint sortert for hver underkategori.

slik ville output sett ut om jeg fikk det som jeg ville.

 

 

		L E K E  T Ø Y (categories.name)

SMÅ PRODUKTER (undercat.name)
actionhelt................10,- (product.name)
sprettball................12,-
penn......................22,-
lighter....................5,-
  Beskrivelse: Pga frakt er denne tom for lightergass. (product.description)
lommebok..................55,-

MELLOMSTORE PRODUKTER
fotball...................150,-
Beskrivelse: Ekte NIKE-fotball
lekebamse.................48,-
  Beskrivelse: Oppfører seg aldri på Halloween
kasse....................298,-
rompesilebrett............38,-

STORE PRODUKTER
sykkel..................4448,-
oppblåsbar båt...........998,-
  Beskrivelse: Det følger med pumpe
gigantisk klovn.........2198,-

leketraktor..............298,- (product.name med undercat_id = 0)
minipiano................598,-
julekalender.............198,-
bambi-lampe..............799,-
  Beskrivelse: Følger ikke med pære
alfabetkoffert...........359,-

 

Det jeg får i stede er:

 

		L E K E  T Ø Y (categories.name)
actionhelt................10,-
SMÅ PRODUKTER
sprettball................12,-
penn......................22,-
SMÅ PRODUKTER
lighter....................5,-
  Beskrivelse: Pga frakt er denne tom for lightergass. (product.description)
SMÅ PRODUKTER
lommebok..................55,-
MELLOMSTORE PRODUKTER
fotball..................150,-
Beskrivelse: Ekte NIKE-fotball
lekebamse.................48,-
  Beskrivelse: Oppfører seg aldri på Halloween
MELLOMSTORE PRODUKTER
kasse....................298,-
rompesilebrett............38,-
STORE PRODUKTER
sykkel..................4448,-
STORE PRODUKTER
oppblåsbar båt...........998,-
  Beskrivelse: Det følger med pumpe
gigantisk klovn.........2198,-
leketraktor..............298,- (product.name med undercat_id = 0)
minipiano................598,-
julekalender.............198,-
bambi-lampe..............799,-
  Beskrivelse: Følger ikke med pære
alfabetkoffert...........359,-

 

Jeg skjønner ingenting, kan noen hjelpe meg? Ja jeg har googlet, lest MySQL-manualen/php-manualen søkt på google men jeg finner ikke noe som forklarer hvordan man

 

"kobler" sammen tre tabeller og grupperer resultetene mot en ID på en av de tre tabellene.

 

 

 

A.

Lenke til kommentar
Videoannonse
Annonse

OISNOT: Den snutten du gav meg hjalp ikke noe.

 

Jeg har kommet fram til en mysql-spørring som sorterer alle riktig, men nå kommer navnet på underkategorien på alle som har den assignet. Jeg vil heller grupere alle og hvis fem produkter er i samme underkategori så skal jeg bare ha En overskrift istede for ei overskrift på hvert produkt.

 

SELECT * FROM product p LEFT JOIN undercat u ON p.undercat_id = u.id
	WHERE p.cat_id = 1
	ORDER BY p.undercat_id

 

Hva PHP-koden angår så er det veldig basic.

 

<?php
$q = 'SELECT * FROM product p LEFT JOIN undercat u 
	ON p.undercat_id = u.id
	WHERE p.cat_id = 1
	ORDER BY p.undercat_id';

$result = mysql_query($q, $db->connection);
while ($row = mysql_fetch_array($result)) {
($i%2) ? $classhtml = 'row1' : $classhtml = 'row2';	
if(!empty($row['description'])) { $marginbottom = '0'; $xmarginbottom = '5px';  } else { $marginbottom = '10px'; }
		echo '<div style="border-bottom: 1px solid #d9bf8c; width: 95%; margin-bottom: '. $marginbottom .'; padding: 5px 0 5px 2px;" class="'.$classhtml.'">
				<div style="float: left; text-align: left; width: 400px;">
					<span style="opacity:.5; margin-right: 10px;">'. $row['undercat_name'] .'</span>
					'. $row['product_name'] .'
				</div>
				<div style="width: 100px; text-align: right; float: right;">kr '. $row['product_price'] .',-/'. $row['product_period'].' min</div>
				<div style="clear:both;"></div>
			</div>';	
	if(!empty($row['description']))
		echo '<div style="width: 95%; padding-left:2px; " class="'.$classhtml.'">'.$row['product_description'].'</div>
				<div style="width: 100%; margin-bottom: '. $xmarginbottom .'; clear: both;"></div>';

$i++;
}

?>

Lenke til kommentar

Du kan prøve noe lignende for å kun printe ut kategori-headlines en gang.

 

<?php

$headlines = array (
	'Små produkter',
	'Små produkter',
	'Små produkter',
	'Små produkter',
	'Små produkter',
	'Store Produkter',
	'Store Produkter',
	'Store Produkter',
	'Store Produkter',
	'XXL',
	'XXLLL'
);

foreach ( $headlines as $headline ) {
	if ( $lastheadline != $headline ) {
		$lastheadline = $headline;
		echo '<h1>' . $headline . '</h1>';
	}
}

?>

Lenke til kommentar

Du kan og prøve

 

while ($row = mysql_fetch_array($result)) {
$arr[$row[0]][] = $row;
}

foreach ($arr as $category => $rows) {
if ($category != null)
	echo "<h1>$category</h1>\n";
foreach ($rows as $row) {
	//print here
}
}

 

Du kan legge til flere under arrays og foreach for hver gruppe du vil ha.

$arr[$row['category']][$row['subcategory']][] = $row;

Endret av OISNOT
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...