Join 4 queries
Okay, dette er et advanceret spørgsmål (hvilket er grunden til de høje point).Jeg har 4 queries, der er afhængige af resultatet af den forrige, men siden loader ekstremt langsomt (pga dette "system", så jeg har bestemt at lave det om. Desværre er mine mysql færdigheder ikke gode nok (endnu), så jeg håber jeg kan få hjælp herinde.
Jeg har valgt at beskrive løsning/systemet først, da koden er uoverskuelig (koden er dog postet under beskrivelsen/teksten):
1. Jeg har 4 tabeller:
- Brand
- Series
- Products
- Prices
2. Beskrivelse:
Har brug for en query, der laver en tabel hvis disse kriterier er opfyldte:
- Finder alle aktive (status) og godkendte (validation_status) "brand".
- Finder alle aktive/godkendte series (validation_status), der tilhører det enkelte "brand". Dette kan gøres da tabellen har en kolonne med id'et på det tilhørende brand (brand_id)
- Finder alle aktive/godkendte produkter (validation_status), der tilhører den enkelte serie. Dette kan gøres da tabellen har en kolonne med id'et på den tilhørende serie(series_id)
- Søg om der er nogle priser tilføjet tabellen prices, der tilhører det enkelte produkt. Dette kan gøres da tabellen har en kolonne med id'et på det tilhørende produkt (product_id)
For at gøre det kort: Den skal kun oprette tabellen hvis der er lagt priser ind i systemet (det vil sige at vi først skal finde alle aktive brands, herefter alle aktive series baseret på aktive brands, herefter aktive produkter baseret på aktive series, herefter (og sidst) checke om der er lagt en pris på produktet ind i "prices" tabellen. Resultatet skal grupperes efter brand (name), så jeg er nød til at gøre det på denne måde.
Det nuværende system kan ses her (live):
http://www.tackleprices.com/products/fishing-reels/series.php
Den gamle kode (nogle variabler (ved den sidste query) er fjernet):
//Select all active brands (order by brand)
$query = mysql_query("SELECT * FROM brand WHERE status='1' AND validation_status='1' ORDER BY brand") or die (mysql_error());
while($row = mysql_fetch_array($query)) {
unset($serie_no);
//If there are any active series when we select them and sort them by name (series)
$query2 = mysql_query("SELECT * FROM series WHERE brand_id='$row[id]' AND type='Reels' AND validation_status='1' ORDER BY series ") or die (mysql_error());
while($row2 = mysql_fetch_array($query2)) {
/* Select all active products based on active series. We dont need any "data", just to know if there are
any active products (based on active series) */
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$row2[id]' AND type='Reels' AND validation_status='1' ") or die (mysql_error());
while($row3 = mysql_fetch_array($query3)) {
//If there is any prices attached to the product, then we create the table
$sql_doublecheck3 = mysql_query("SELECT * FROM prices WHERE product_id='$row3[id]' ") or die (mysql_error());
$doublecheck3 = mysql_num_rows($sql_doublecheck3);
if(doublecheck3 != 0...... flere kriterier fjernet for at gøre det mere overskueligt) {
har fået lavet dette, men der kommer ikke noget output (dog heller ingen feejl), ved heller ikke om det skal gøres på denne måde (brugte noget "gammelt" kode):
$query = mysql_query("SELECT brand.id as brand_id,series.id as series_id,products.id as product_id FROM brands JOIN series,products,prices ON series.brand_id=brand.id,products.id=series.id,prices.product_id=products.id WHERE products.type='reels' ORDER BY brand.date_added DESC") or die (mysql_error());
while($fetch = mysql_fetch_array($query)) {
