Archief - PHP: Beste manier om een prijslijst met categorieen te maken?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

T-b0

Legacy Member
Dag allemaal,

Ben momenteel bezig met een dynamische prijslijst. Het product, de prijs van het product en de categorie worden in de database geladen via een form. Dit vormt geen probleem.

Maar nu zou elke categorienaam eerst als titel moeten komen met alle producten eronder die tot deze categorie behoren. Vervolgens de volgende categorie met zijn producten enzoverder. Hier kom ik namelijk niet uit...

Is het misschien beter om bij elke categorie een andere table te maken of is dat te omslachtig?

Huidige prijslijst kan bekeken worden op http://www.euroclinix.com/index2.php?content=prijslijst

Dank bij voorbaat

Tyfius

Legacy Member
een tabel met alle categorieen, en dan bij de producten een veld voorzien met het categorie id.

T-b0

Legacy Member
De volgende code werkt wel. Maar kan hij geen problemen opleveren (bij kleine schrijffoutjes bij het invoegen van nieuwe producten die behoren tot bestaande categorie?)

Code:
<?php
include('dbconnect.php');
$sql = mysql_query("select * from pricelist order by catfield") or die(mysql_error());

$prevCat='';
while($row = mysql_fetch_array($sql))
{
	$title = $row["titlefield"];
	$id = $row["idfield"];
	$price = $row["pricefield"];
	$categorie = $row["catfield"];
	
	// cat veranderd ?
	// dan output geven
	if ($categorie != $prevCat)  {
		echo "<h2>$categorie</h2>";
	}
	echo  $title, ' ', $price, '<br/>';
	
	$prevCat = $categorie;
}
?>

Obliv`

Legacy Member
Ik denk dat je eerst je datamodel eens deftig moet gaan normaliseren ...

Normaal zou je het zo doen:
Code:
[U]Je hebt 2 tabellen:[/U]
tblCategorieën (categorieID, categorie)
tblProducten (productID, categorieID, product, prijs)

[U]Eerst loop je doorheen de categorie tabel:[/U]
SELECT categorieID, categorie FROM tblCategorieën

while (categorieSet aflopen)
{
     <h2>$categorie</h2>

     [U]Dan selecteer je de producten die tot de huidige categorie behoren:[/U]
     SELECT productID, product, prijs FROM tblProducten WHERE categorieID = $categorieID

     [U]Tenslotte loop je doorheen producten tabel:[/U]
     while (productenSet aflopen)
     {
          $product, $prijs
     }

}

Voila, dit is een ruwe structuur om alles af te lopen. Zo zal je het wel deftig naar php kunnen omzetten zeker.

T-b0

Legacy Member
Ah ok ja die code lijkt me ok stabieler. Hartelijk dank.

Moet dan wel eens kijken hoe ik een form maak waar in een bestaande cat. en een nieuwe categorie kan aangemaakt worden.

grtz en thnks

Fr3aK

Legacy Member
Ik zou eerder een JOIN gebruiken om de database niet te zwaar te belasten (niet dat het zo veel uitmaakt op zo'n klein systeem)

Dus adhv Obliv` z'n datamodel:
Code:
tblCategorie (categorieID, categorie)
tblProduct (productID, categorieID, product, prijs)
met volgende code:
PHP:
$query = mysql_query("SELECT p.product, p.prijs, c.categorie FROM tblProduct p INNER JOIN tblCategorie c ON (p.categorieID = c.categorieID) ORDER BY c.categorie ASC, p.product ASC");
if (mysql_num_rows($query)) {
  $cat = "";
  while ($row = mysql_fetch_assoc($query)) {
    if ($row['categorie'] != $cat) {
      echo "<h2>".$row['categorie']."</h2>\n";
      $cat = $row['categorie'];
    }
    echo $row['product']." &euro;".$row['prijs']."<br />\n";
  }
}

En als je wil weten hoe je categorieën onder categorieën kan aanmaken kan je best eens wat meer info opzoeken over "recursie".
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan