[Помощь] Случайный товар, альтернативы к модели

Тема в разделе "Shop-script", создана пользователем baltazor-vova, 25 янв 2010.

Статус темы:
Закрыта.
  1. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Добрый день! Есть 2 вопроса, которые хотелось бы решить с Вашей помощью...

    1) В product_detailed.php я закинул вот такой код, который отвечает за вывод скажем n..ое количество товаров из базы, дело в том что в этом коде есть 2 проблемы, которые хотелось бы с вашем помощью решить: (проблема №1 это вывод товаров с 0 остатком, проблема №2 это не соответствие количеству, скажем я ставлю на вывод 8, выводит 3-4, иногда все 8)

    Вот собственно код:
    PHP:
    //all product
        
    $result = array();
        
    $q db_query("SELECT `categoryID`,`name` FROM ".SS_products." order by rand() limit 0,8") or die (db_error());
        while (
    $row db_fetch_row($q))
        {
            
    $q1 db_query("SELECT productID, name, default_picture, Price, categoryID, list_price FROM ".PRODUCTS_TABLE."  where `categoryID`=$row[0] order by rand() limit 0,8") or die (db_error());
            if (
    $row1 db_fetch_row($q1))
            {
                if ( 
    is_null($row1[2]) )
                    continue;
                
    $picture db_query"select thumbnail, filename, enlarged from ".PRODUCT_PICTURES." where photoID=".$row1[2] );
                
    $picture_row db_fetch_row$picture );
                if ( 
    $picture_row )
                {
                     if ( 
    file_exists"./products_pictures/".$picture_row[0] ) )
                    {
                        
    $row1[2] = $picture_row[0];
                        if (
    $row1[3]<$row1[5]){$row1[5] = show_price($row1[5]);}else{$row1[5] ="";}
                        
    $row1[3] = show_price($row1[3]);
                        
    $result[] = array($row[1],$row1);
                    }
                }
            }
        }
        
    $smarty->assign("all_product",$result); 

    2) Думаю будет полезна скажем каждому....! Открываем мы товар в детальном описании, видим цену, а вот если бы реализовать такое: "Альтернативы к этой модели" , то есть, из категории скажем "фотоаппараты" показывается 4 фотика которые +,- по такой же цене....Скажем без разницы это может быть любых брендов....и с наличием на складе!

    В админке такая вещь не катит, чтобы в ручную добавлять.....база товаров в порядке 5000-6000

    :bc::thenks::thenks::thenks:
     
  2. NeoGayver

    NeoGayver

    Регистр.:
    27 авг 2008
    Сообщения:
    225
    Симпатии:
    83
    Много раз можно удивляться для чего создавать велосипед да еще с 20ю колесами и 30 рулями (это я про кривость составления запроса к БД)
    В двиге магазина реализована функция для вывода товара как по ID так и вывод всей базы товара по категориям да и еще многое чего! Ну если все же решили пойти методом велосипеда! вообще функцию rand в запрос вставлять не вежливо))
    Если вам нужен четкий вывод кол-во товара то измените ключ лимит в запросе!
    и так же по поводу остатка - вам нужно составить более грамотное условие для запроса к БД что бы получить четкий ответ от БД!
     
    baltazor-vova нравится это.
  3. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Я с вами вполне согласен, но как бы вопрос остается открытым, а я не сильный знаток только учусь, если вам не сложно будет сделать все правильно:

    1) Хотелось бы сделать вывод случайных товаров из его категории то есть клавиатур A4Tech, рядом "похожие модели" +,- по цене просматриваемого продукта, естественно с наличием....
    2) Если же по первому вопросу все настолько сложно, прошу сделать правильный запрос :
    PHP:
    //all product
        
    $result = array();
        
    $q db_query("SELECT `categoryID`,`name` FROM ".SS_products." order by rand() limit 0,8") or die (db_error());
        while (
    $row db_fetch_row($q))
        {
            
    $q1 db_query("SELECT productID, name, default_picture, Price, categoryID, list_price FROM ".PRODUCTS_TABLE."  where `categoryID`=$row[0] order by rand() limit 0,8") or die (db_error());
            if (
    $row1 db_fetch_row($q1))
            {
                if ( 
    is_null($row1[2]) )
                    continue;
                
    $picture db_query"select thumbnail, filename, enlarged from ".PRODUCT_PICTURES." where photoID=".$row1[2] );
                
    $picture_row db_fetch_row$picture );
                if ( 
    $picture_row )
                {
                     if ( 
    file_exists"./products_pictures/".$picture_row[0] ) )
                    {
                        
    $row1[2] = $picture_row[0];
                        if (
    $row1[3]<$row1[5]){$row1[5] = show_price($row1[5]);}else{$row1[5] ="";}
                        
    $row1[3] = show_price($row1[3]);
                        
    $result[] = array($row[1],$row1);
                    }
                }
            }
        }
        
    $smarty->assign("all_product",$result);  

    Конечно же большое желание реализовать вариант №1, так как в нем очень большая необходимость. Буду очень благодарен :thenks::bc::bc::thenks::thenks::thenks::thenks:
     
  4. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Вот есть решение для вывода случайных товаров из категории просмотра данного товара...
    есть траблы, которые если кто-то возьмется переделать:

    1) Это вывод "похожие товары" по цене...Мы смотрим ноутбук Acer по цене 500 дол, рядом "похожие товары" "<" "=" ">" по этой же цене, ноутбуки те же Acer
    2) Это вывод конечно же товара, который есть реально в наличии...
    3) Фото товара, его цена....

    Вот собственно и коды:
    product_detailed.php
    PHP:
    $q db_query("SELECT name,productID FROM ".PRODUCTS_TABLE."  WHERE categoryID='$categoryID' AND (productID<>'$productID') ORDER BY rand() LIMIT 2") or die (db_error());
    while (
    $row db_fetch_row($q))
    {
      
    $sim[] = $row;
    }
    $smarty->assign("similar"$sim);
    product_detailed.tpl.html
    PHP:
    <pПохожие товары:<br>
    {
    section name=i loop=2}<a href="index.php?productID={$similar[i][1]}">{$similar[i][0]}</a><br>{/section
    :thenks::thenks::thenks::thenks::thenks::bc::bc::bc:
    Данные коды выводят случайный товар из просматриваемой категории товара.....
     
  5. VenomHOLD

    VenomHOLD

    Регистр.:
    14 мар 2009
    Сообщения:
    272
    Симпатии:
    52
    благодаря A_L_I_E_N удалось реализовать вывод картинок и цен.

    в product_detailed.php
    после $smarty->assign("product_info", $a);

    PHP:
    $sim = array();
         
    $q db_query("SELECT productID FROM ".PRODUCTS_TABLE."  WHERE categoryID='$categoryID' AND (productID<>'$productID') ORDER BY rand() LIMIT 2") or die (db_error());
         while (
    $row db_fetch_row($q))
         { 
              
    $q1 db_query("SELECT productID, name, default_picture, Price FROM ".PRODUCTS_TABLE." WHERE productID=$row[0]") or die (db_error());
              if (
    $row1 db_fetch_row($q1))
              {
                   if ( 
    is_null($row1[2]) )
                        continue;
                   
    $picture db_query"select filename from ".PRODUCT_PICTURES." WHERE photoID=".$row1[2] );
                   
    $picture_row db_fetch_row$picture );
                   if ( 
    $picture_row )
                   {
                         if ( 
    file_exists"./products_pictures/".$picture_row[0] ) )
                        {
                             
    $row1[2] = $picture_row[0];          // thumbnail //
                             
    $row1[4] = $row1[5];               // brief_description //
                             
    $sim[] = $row1;
                        }
                   }
              }
         }
         
    $smarty->assign("similar",$sim);
    в шаблон - у меня 12 шаблон, по сути заменил дефолтные рекомендуем посмотреть на этот мод

    PHP:
    {if $similar}
    <
    p><br><u><b>Рекомендуем посмотреть:</b></u><br>
        <
    table border=class="voting">
            {
    section name=i loop=2}
                        <
    tr>                        <td align="center">
    <
    a alt="{$similar[i][1]}title="{$similar[i][1]}href="index.php?productID={$similar[i][0]}"><img src="products_pictures/{$similar[i][2]}alt="{$similar[i][1]}title="{$similar[i][1]}border=0></a>
                    </
    td>
                        <
    td>
    <
    a alt="{$similar[i][1]}title="{$similar[i][1]}href="index.php?productID={$similar[i][0]}">{$similar[i][1]}</a>
                            </
    td>
                            <
    td>                                 <nobr>&nbsp;<font color=brown><b>${$similar[i][3]}</b></font></nobr>
                            </
    td>
                        </
    tr>
                    {/
    section}
                    </
    table>{/if}
    работает отлично!
     
  6. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Вариант да действительно рабочий, но все же есть 2 пункта, которые осталось решить:

    1) Это вывод по цене... которая меньше продукта, больше на пару долларов, или равна этой цене.... " > ", " = " , " < "

    2) наличие на складе...


    Осталось еще немножко.....и у нас получатся "Альтернативы к этой модели"
     
  7. VenomHOLD

    VenomHOLD

    Регистр.:
    14 мар 2009
    Сообщения:
    272
    Симпатии:
    52
    2) наличие на складе...

    $q = db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND (productID<>'$productID') AND enabled=1 ORDER BY rand() LIMIT 2") or die (db_error());

    затупил)) я наличие не веду, я выключаю и включаю товары)) поэтому сделал так... Ы!
     
    baltazor-vova нравится это.
  8. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Вношу маленькую поправку "Для тех кто ведет учет товаров на складе"
    Код должен иметь такой характер:
    PHP:
    $q db_query("SELECT productID FROM ".PRODUCTS_TABLE." WHERE categoryID='$categoryID' AND (productID<>'$productID') AND in_stock >0 ORDER BY rand() LIMIT 2") or die (db_error()); 
    А что касается пункта №3 скорее всего надо играться
    PHP:
    AND (Price < ( - )) AND (Price > ( + ))
    Это вывод товаров по примерной цене!
    но там синтаксическая ошибка.....:thenks::thenks::bc::bc:
     
  9. VenomHOLD

    VenomHOLD

    Регистр.:
    14 мар 2009
    Сообщения:
    272
    Симпатии:
    52
    может пропустили '
    PHP:
    $q db_query("SELECT productID FROM ".PRODUCTS_TABLE."  WHERE categoryID='$categoryID' AND (productID<>'$productID')  AND (Price < ('$price' - '$shift')) AND (Price < ('$price' + '$shift')) ORDER BY rand() LIMIT 2") or die (db_error());
     
  10. baltazor-vova

    baltazor-vova Постоялец

    Регистр.:
    4 авг 2009
    Сообщения:
    79
    Симпатии:
    18
    Синтаксис верный, но вывод товара случайного товара все равно так как надо не работает, если у меня ноутбук стоит 500 долларов он прет на вывод ноутбуки за 900, хотя есть в наличии и за 550-600
     
Статус темы:
Закрыта.