PhotoAndre Skrevet 27. november 2008 Del Skrevet 27. november 2008 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. idcat_id undercat_id name price description idname description active idcategory_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
ThomasQ Skrevet 27. november 2008 Del Skrevet 27. november 2008 '. $_GET["catid"].' Bytt Til: '. $_GET['catid'].' http://www.w3schools.com/Sql/sql_join_left.asp Lenke til kommentar
OISNOT Skrevet 27. november 2008 Del Skrevet 27. november 2008 Vil vel egentlig bruke ORDER BY istedenfor GROUP BY ? Og for hjelp til å skrive det ut skikkelig bør du kanskje vise den relevante PHP koden. Lenke til kommentar
OISNOT Skrevet 27. november 2008 Del Skrevet 27. november 2008 '. $_GET["catid"].' Bytt Til: '. $_GET['catid'].' http://www.w3schools.com/Sql/sql_join_left.asp Uhu? Din "endring" vil gi samme resultat som originalen ... Du mener: if (!$catId = filter_input(INPUT_GET, 'catid', FILTER_VALIDATE_INT)) { //categoryId not valid die('Invalid category id'); } $sql = '*snip* product.cat_id = ' . $catId . ' *snip*'; Lenke til kommentar
PhotoAndre Skrevet 28. november 2008 Forfatter Del Skrevet 28. november 2008 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
Jonas Skrevet 28. november 2008 Del Skrevet 28. november 2008 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
OISNOT Skrevet 28. november 2008 Del Skrevet 28. november 2008 (endret) 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 28. november 2008 av OISNOT 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å