Гость
Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
|
Добрый день, господа!
С джумлой немного пришлось помучиться.
Есть такой запрос:
CODE ( SQL):
скопировать код в буфер обмена
SELECT DISTINCT p.product_sku, p.product_desc, p.product_name, p.product_full_image, pr.product_price, cx.category_id AS cx_cat_id, prt.category_id AS prt_cat_id FROM jos_vm_product AS p LEFT JOIN $priceTable AS prt ON p.`product_sku` = prt.`product_sku` LEFT JOIN `jos_vm_product_category_xref` AS cx ON p.`product_id` = cx.`product_id` LEFT JOIN `jos_vm_product_mf_xref` AS mx ON p.`product_id` = mx.`product_id` LEFT JOIN `jos_vm_product_price` AS pr ON p.`product_id` = pr.`product_id` WHERE p.product_publish = 'Y' AND mx.manufacturer_id = '17' ORDER BY p.product_id
но надо вместо id категорий cx_cat_id и prt_cat_id вывести соответствующие этим id значения, которые уже записаны в другой таблице .
Пытаюсь вот так сделать
CODE ( SQL):
скопировать код в буфер обмена
SELECT DISTINCT p.product_sku, p.product_desc, p.product_name, p.product_full_image, pr.product_price, ccx.categ_1 AS cx_cat_id, cprt.categ_1 AS prt_cat_id FROM jos_vm_product AS p LEFT JOIN $priceTable AS prt ON p.`product_sku` = prt.`product_sku` LEFT JOIN `jos_vm_product_category_xref` AS cx ON p.`product_id` = cx.`product_id` LEFT JOIN $allCateg AS ccx ON cx.category_id = ccx.categ_id LEFT JOIN $allCateg AS cprt ON prt.category_id = cprt.categ_id LEFT JOIN `jos_vm_product_mf_xref` AS mx ON p.`product_id` = mx.`product_id` LEFT JOIN `jos_vm_product_price` AS pr ON p.`product_id` = pr.`product_id` WHERE p.product_publish = 'Y' AND mx.manufacturer_id = '17' ORDER BY p.product_id
ничего не выводит в полях cx_cat_id и prt_cat_id, т. е. пустые значения в них.
Как по-другому сделать не соображу.
(Добавление)
Приношу извинения, запрос правильный был. Просто в исходной таблице $allCateg соответствующие каждому id пустые были.
Сразу же ещё спрошу. Если кто знаком как в joomla организована иерархия категорий, тот знает, что все категории и подкатегории к каждому товару находятся в одной таблице и в 2 колонка: это parent_id и child_id. Т. к. подкатегорий может быть много (хотя больше 4 не встречал), то это дело каким то образом можно вытянуть sql запросом, чтобы для конкретного товара получить полный перечень категорий и подкатегорий в одну строку.
Пробывал по-разному, ничего не получилось, решил написать громоздкий код, он хоть и работает, но всё же интересно, как нормальные люди решают данную проблему
PHP:
скопировать код в буфер обмена
$query_cat = "SELECT * FROM $category_xref LEFT JOIN $category ON $category_xref.category_child_id = $category.category_id WHERE $category.category_publish='Y' ORDER BY category_parent_id"; $cat_parent_id=$row_cat['category_parent_id']; $cat_child_id=$row_cat['category_child_id']; $query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id']; $cat_name=$name_cat['category_name']; if ($cat_parent_id==0) { //проверяем, нет ли у данной категории товара на верхнем уровне $query_cat6="SELECT distinct c.category_id FROM jos_vm_category c INNER JOIN jos_vm_product_category_xref pc ON c.category_id = pc.category_id WHERE pc.category_id = ".$cat_child_id; //echo "Количество строк в запросе = ".mysql_num_rows($res_cat6)."<br>"; } else { //если нет, то публикуем её SET categ_id = $cat_child_id, categ_1='".$cat_name."'") } //если не нужно выводить в перечень категории первого уровня, то закоменнтировть следующую строку //echo htmlspecialchars($cat_name)."/".$cat_child_id."<br>"; //fputs ( $file, "<category id=\"".$cat_child_id."\">".htmlspecialchars($cat_name)."</category>\n"); } else { //echo htmlspecialchars($cat_name);//."/".$cat_parent_id; $query3 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id; $cat_name3=$name_cat3['category_name']; $query_cat4 = "SELECT * FROM $category_xref WHERE category_child_id=".$cat_parent_id; $cat_parent_id4=$row_cat4['category_parent_id']; $cat_child_id4=$row_cat4['category_child_id']; if($cat_parent_id4==0){ //echo htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>"; SET categ_id = $cat_child_id, categ_1='".$cat_name3."', categ_2='".$cat_name."'") //mysql_query("INSERT INTO $allCateg ( `categ_id`, `categ_1`, `categ_2`, `categ_3`, `categ_4`) //VALUES ($cat_child_id, htmlspecialchars($cat_name3),htmlspecialchars($cat_name),'','')") or die('SQL ERROR:'.mysql_error()); } else{ $query5 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id4; $cat_name5=$name_cat5['category_name']; //echo htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>"; $query_cat6 = "SELECT * FROM $category_xref WHERE category_child_id=".$cat_parent_id4; $cat_parent_id6=$row_cat6['category_parent_id']; $cat_child_id6=$row_cat6['category_child_id']; if($cat_parent_id6==0){ //echo htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>"; SET categ_id = $cat_child_id, categ_1='".$cat_name5."', categ_2='".$cat_name3."', categ_3='".$cat_name."'") //mysql_query("INSERT INTO $allCateg ( `categ_id`, `categ_1`, `categ_2`, `categ_3`, `categ_4`) //VALUES ($cat_child_id, htmlspecialchars($cat_name5),htmlspecialchars($cat_name3), htmlspecialchars($cat_name),'')") or die('SQL ERROR:'.mysql_error()); } else{ $query7 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id6; $cat_name7=$name_cat5['category_name']; //echo htmlspecialchars($cat_name7)."/".htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>"; SET categ_id = $cat_child_id, categ_1='".$cat_name7."', categ_2='".$cat_name5."', categ_3='".$cat_name3."', categ_4='".$cat_name."'") } } } } } }
(Отредактировано автором: 07 Марта, 2014 - 09:15:55)
|