LEFT JOIN + ORDER
Ik heb het volgende stukje sql:
Code (php)
1
2
3
2
3
<?php
$result=db_perform_query('SELECT p_2_c.products_id,p_d.products_name,p.products_image,p.products_price,s.specials_new_products_price,t.tax_rate FROM products_to_categories AS p_2_c,products AS p,products_description AS p_d,tax_rates AS t LEFT JOIN specials AS s ON p_2_c.products_id=s.products_id WHERE p_2_c.categories_id='.(int)$cat_id[count($cat_id)-1].' AND p_2_c.products_id=p_d.products_id AND p_2_c.products_id=p.products_id AND p_2_c.products_id=p.products_id AND p.products_tax_class_id=t.tax_class_id AND p.products_status=1 AND p_d.language_id='.LANGUAGE_ID.' '.$row_sort.' LIMIT '.$query_start.','.$query_limit);
?>
$result=db_perform_query('SELECT p_2_c.products_id,p_d.products_name,p.products_image,p.products_price,s.specials_new_products_price,t.tax_rate FROM products_to_categories AS p_2_c,products AS p,products_description AS p_d,tax_rates AS t LEFT JOIN specials AS s ON p_2_c.products_id=s.products_id WHERE p_2_c.categories_id='.(int)$cat_id[count($cat_id)-1].' AND p_2_c.products_id=p_d.products_id AND p_2_c.products_id=p.products_id AND p_2_c.products_id=p.products_id AND p.products_tax_class_id=t.tax_class_id AND p.products_status=1 AND p_d.language_id='.LANGUAGE_ID.' '.$row_sort.' LIMIT '.$query_start.','.$query_limit);
?>
Deze wil ik laten orderen op prijs, het probleem: ik heb 2 prijzen, products_price en specials_new_products_price. Specials_new_products_price wordt uit de DB gehaald met een LEFT JOIN en bestaat niet altijd.
Vraag: hoe kan ik deze query laten orderen op specials_new_products_price als deze bestaat en wanneer deze niet bestaat op products_price?
Bvd
Ik snap ook niet waarom je die prijzen zo hebt staan, er geld altijd maar 1 prijs voor een product. Wat je bijv zou kunnen doen is de prijzentabel zo opzetten:
id, product_id, prijs, prijs_type, startdatum
Je maakt dan evt een tabel prijs_type waarin je dus products_price en specials_new_products_price plaatst. De startdatum is de datum waarop de prijs ingaat (en tevens geldt de vorige prijs vanaf die datum niet meer)
Zo kan je zelfs een prijshistorie bewaren, je kan ook vantevoren instellen hoe lang je specials_new... geldig is. Scheelt jou een boel werk, rare query's en is ook een stuk logischer in de opbouw.
Kan ik inderdaad doen. Ik zit op het moment met een al gevulde database waaromheen ik een nieuw design aan het bouwen ben. Dus dacht vanaf daar gewoon alles voor elkaar te kunnen krijgen. Dan maar even wat in de tabellen aanpassen. Bedankt.