Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как правильно join сделать?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: sql-запрос
Wooorker
Отправлено: 07 Марта, 2014 - 09:00:37
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Добрый день, господа!
С джумлой немного пришлось помучиться.
Есть такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. 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
  2.     FROM jos_vm_product AS p
  3.     LEFT JOIN $priceTable AS prt ON p.`product_sku` = prt.`product_sku`
  4.     LEFT JOIN `jos_vm_product_category_xref` AS cx ON p.`product_id` = cx.`product_id`
  5.     LEFT JOIN `jos_vm_product_mf_xref` AS mx ON p.`product_id` = mx.`product_id`
  6.     LEFT JOIN `jos_vm_product_price` AS pr ON p.`product_id` = pr.`product_id`
  7.     WHERE p.product_publish = 'Y' AND mx.manufacturer_id = '17'
  8.     ORDER BY p.product_id
  9.    

но надо вместо id категорий cx_cat_id и prt_cat_id вывести соответствующие этим id значения, которые уже записаны в другой таблице .
Пытаюсь вот так сделать
CODE (SQL):
скопировать код в буфер обмена
  1. 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
  2.     FROM jos_vm_product AS p
  3.     LEFT JOIN $priceTable AS prt ON p.`product_sku` = prt.`product_sku`
  4.     LEFT JOIN `jos_vm_product_category_xref` AS cx ON p.`product_id` = cx.`product_id`
  5.     LEFT JOIN $allCateg AS ccx ON cx.category_id = ccx.categ_id
  6.     LEFT JOIN $allCateg AS cprt ON prt.category_id = cprt.categ_id
  7.     LEFT JOIN `jos_vm_product_mf_xref` AS mx ON p.`product_id` = mx.`product_id`
  8.     LEFT JOIN `jos_vm_product_price` AS pr ON p.`product_id` = pr.`product_id`
  9.     WHERE p.product_publish = 'Y' AND mx.manufacturer_id = '17'
  10.     ORDER BY p.product_id
  11.    

ничего не выводит в полях cx_cat_id и prt_cat_id, т. е. пустые значения в них.
Как по-другому сделать не соображу.
(Добавление)
Приношу извинения, запрос правильный был. Просто в исходной таблице $allCateg соответствующие каждому id пустые были.

Сразу же ещё спрошу. Если кто знаком как в joomla организована иерархия категорий, тот знает, что все категории и подкатегории к каждому товару находятся в одной таблице и в 2 колонка: это parent_id и child_id. Т. к. подкатегорий может быть много (хотя больше 4 не встречал), то это дело каким то образом можно вытянуть sql запросом, чтобы для конкретного товара получить полный перечень категорий и подкатегорий в одну строку.
Пробывал по-разному, ничего не получилось, решил написать громоздкий код, он хоть и работает, но всё же интересно, как нормальные люди решают данную проблему Улыбка

PHP:
скопировать код в буфер обмена
  1.    $query_cat = "SELECT * FROM $category_xref
  2.        LEFT JOIN $category ON $category_xref.category_child_id = $category.category_id
  3.        WHERE $category.category_publish='Y'
  4.        ORDER BY category_parent_id";
  5.     $res_cat = mysql_query($query_cat) or die(mysql_error());
  6.     while ($row_cat=mysql_fetch_array($res_cat)) {
  7.             $cat_parent_id=$row_cat['category_parent_id'];
  8.             $cat_child_id=$row_cat['category_child_id'];
  9.  
  10.             $query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
  11.             $res_cat1 = mysql_query($query2) or die(mysql_error());
  12.             $name_cat=mysql_fetch_array($res_cat1);
  13.             $cat_name=$name_cat['category_name'];
  14.             if ($cat_parent_id==0) {
  15.                     //проверяем, нет ли у данной категории товара на верхнем уровне
  16.                     $query_cat6="SELECT distinct c.category_id
  17.                        FROM jos_vm_category c
  18.                        INNER JOIN jos_vm_product_category_xref pc ON c.category_id = pc.category_id
  19.                        WHERE pc.category_id = ".$cat_child_id;
  20.                     $res_cat6 = mysql_query($query_cat6) or die(mysql_error());
  21.                     if (mysql_num_rows($res_cat6)==0) {
  22.                         //echo "Количество строк в запросе = ".mysql_num_rows($res_cat6)."<br>";
  23.                     }
  24.                     else {
  25.                         //если нет, то публикуем её
  26.                         mysql_query("INSERT INTO $allCateg
  27.                        SET categ_id = $cat_child_id,
  28.                        categ_1='".$cat_name."'")
  29.                         or die('SQL ERROR:'.mysql_error());
  30.                    }
  31.                     //если не нужно выводить в перечень категории первого уровня, то закоменнтировть следующую строку
  32.                     //echo htmlspecialchars($cat_name)."/".$cat_child_id."<br>";
  33.                     //fputs ( $file, "<category id=\"".$cat_child_id."\">".htmlspecialchars($cat_name)."</category>\n");
  34.             }
  35.             else {
  36.                     //echo htmlspecialchars($cat_name);//."/".$cat_parent_id;
  37.                    
  38.                     $query3 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id;
  39.                     $res_cat3 = mysql_query($query3) or die(mysql_error());
  40.                     $name_cat3=mysql_fetch_array($res_cat3);
  41.                     $cat_name3=$name_cat3['category_name'];
  42.                        
  43.                     $query_cat4 = "SELECT * FROM $category_xref WHERE category_child_id=".$cat_parent_id;
  44.                     $res_cat4 = mysql_query($query_cat4) or die(mysql_error());
  45.                     while ($row_cat4=mysql_fetch_array($res_cat4)) {
  46.                         $cat_parent_id4=$row_cat4['category_parent_id'];
  47.                         $cat_child_id4=$row_cat4['category_child_id'];
  48.                        
  49.                         if($cat_parent_id4==0){
  50.                             //echo htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>";
  51.                             mysql_query("INSERT INTO $allCateg
  52.                            SET categ_id = $cat_child_id,
  53.                            categ_1='".$cat_name3."',
  54.                            categ_2='".$cat_name."'")
  55.                             or die('SQL ERROR:'.mysql_error());
  56.  
  57.                             //mysql_query("INSERT INTO $allCateg ( `categ_id`, `categ_1`, `categ_2`, `categ_3`, `categ_4`)
  58.                             //VALUES ($cat_child_id, htmlspecialchars($cat_name3),htmlspecialchars($cat_name),'','')") or die('SQL ERROR:'.mysql_error());
  59.                         }
  60.                         else{
  61.                             $query5 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id4;
  62.                             $res_cat5 = mysql_query($query5) or die(mysql_error());
  63.                             $name_cat5=mysql_fetch_array($res_cat5);
  64.                             $cat_name5=$name_cat5['category_name'];
  65.                             //echo htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>";
  66.  
  67.                             $query_cat6 = "SELECT * FROM $category_xref WHERE category_child_id=".$cat_parent_id4;
  68.                             $res_cat6 = mysql_query($query_cat6) or die(mysql_error());
  69.                             while ($row_cat6=mysql_fetch_array($res_cat6)) {
  70.                                 $cat_parent_id6=$row_cat6['category_parent_id'];
  71.                                 $cat_child_id6=$row_cat6['category_child_id'];
  72.                                
  73.                                 if($cat_parent_id6==0){
  74.                                     //echo htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>";
  75.                                     mysql_query("INSERT INTO $allCateg
  76.                                    SET categ_id = $cat_child_id,
  77.                                    categ_1='".$cat_name5."',
  78.                                    categ_2='".$cat_name3."',
  79.                                    categ_3='".$cat_name."'")
  80.                                     or die('SQL ERROR:'.mysql_error());
  81.  
  82.                                     //mysql_query("INSERT INTO $allCateg ( `categ_id`, `categ_1`, `categ_2`, `categ_3`, `categ_4`)
  83.                                     //VALUES ($cat_child_id, htmlspecialchars($cat_name5),htmlspecialchars($cat_name3), htmlspecialchars($cat_name),'')") or die('SQL ERROR:'.mysql_error());
  84.                                 }
  85.                                 else{
  86.                                     $query7 = "SELECT category_name FROM $category WHERE category_id=".$cat_parent_id6;
  87.                                     $res_cat7 = mysql_query($query7) or die(mysql_error());
  88.                                     $name_cat7=mysql_fetch_array($res_cat7);
  89.                                     $cat_name7=$name_cat5['category_name'];
  90.                                     //echo htmlspecialchars($cat_name7)."/".htmlspecialchars($cat_name5)."/".htmlspecialchars($cat_name3)."/".htmlspecialchars($cat_name)."/".$cat_child_id."<br>";
  91.                                     mysql_query("INSERT INTO $allCateg
  92.                                    SET categ_id = $cat_child_id,
  93.                                    categ_1='".$cat_name7."',
  94.                                    categ_2='".$cat_name5."',
  95.                                    categ_3='".$cat_name3."',
  96.                                    categ_4='".$cat_name."'")
  97.                                     or die('SQL ERROR:'.mysql_error());
  98.  
  99.                                 }
  100.  
  101.                             }
  102.                         }
  103.                     }
  104.                 }
  105.     }

(Отредактировано автором: 07 Марта, 2014 - 09:15:55)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB