Заполнить "С этим товаром покупают"

Тема в разделе "WebAsyst", создана пользователем Buyer, 23 окт 2009.

Статус темы:
Закрыта.
Модераторы: mdss
  1. Buyer

    Buyer Постоялец

    Регистр.:
    5 апр 2009
    Сообщения:
    55
    Симпатии:
    9
    Хочу заполнить "С этим товаром покупают". По 5 позиций на каждый товар. База большая 30000 товаров. Руками ни каких сил не хватит. Хочу сделать обработку, чтобы заполнить, но чего-то не очень получилось. Написал следующе
    PHP:
    $q=mysql_query"SELECT productID, categoryID FROM `SC_products`  WHERE 1");
         while(
    $r mysql_fetch_assoc($q))
               {
                
    $q1=mysql_query"SELECT productID FROM `SC_products`  WHERE categoryID=".$r['categoryID']." ORDER BY rand() LIMIT 3");
                    while(
    $r1 mysql_fetch_assoc($q1))
                           {
                            
    $q2=mysql_query("INSERT INTO SC_related_items (productID, Owner)".
                             
    "VALUES(".$r1['productID'].",".$r['productID'].")");
                        }
                  }
    Вроде текст-то правильный, но при большом количестве товара виснет. rand() вот это слабое место, но без него смысла нет т.к. заполнятся одинаковыми товарами. И еще....а потом при добавлении товара снова такую большую обработку запускать?
    Вот не знаю как решить. Есть у кого какие мысли?
     
  2. nsd_net

    nsd_net Создатель

    Регистр.:
    12 июл 2009
    Сообщения:
    26
    Симпатии:
    7
    1. тебе нужно каждому товару из категории добавить другие товары из этой же категории? или любые?
    2. при заполнении магазина увеличивается productId в sc_products.
    в условие where его добавишь->большую обработку запускать не придётся.
     
  3. Buyer

    Buyer Постоялец

    Регистр.:
    5 апр 2009
    Сообщения:
    55
    Симпатии:
    9
    1) Да хотелось бы из той же категории, но как ни будь бы сделать.
    2) Магазин заполнен уже давно. Работет три года там много чего поудалялсоь и номера давно перемешались.
     
  4. Crazy_Serg

    Crazy_Serg Постоялец

    Регистр.:
    13 сен 2009
    Сообщения:
    83
    Симпатии:
    16
    Отдаю твой код с отредактированным 1-м запросом
    PHP:
    $total_products=30000;
    $limit=1000;
    $add_products=3;
    function 
    update_related_items($total_products$limit,$add_products)
    {
    For (
    $count=0;$count++;$total_products)
    {
        
    $query1=<<<EOT
    SELECT SC_products.productID, categoryID,SC_related_items.Owner
    FROM 
    SC_products,
    SC_related_items
    WHERE 
    SC_products.productID!=SC_related_items.Owner
    EOT;
        
    q=mysql_query($query1);
        
        while(
    $r mysql_fetch_assoc($q))
        {
            
    $query2=<<<EOT
    SELECT 
            productID 
    FROM 
            SC_products
    WHERE
    categoryID=
    {$r['categoryID']}
    ORDER BY rand() 
    LIMIT 
    $add_products;
    EOT;
            
    $q1=mysql_query($query2);
            while(
    $r1 mysql_fetch_assoc($q1))
            {
                
    $query3=<<<EOT
    INSERT INTO 
    SC_related_items 
    (
    productID, 
    Owner

    VALUES
    (
    "
    {$r1['productID']}",
    "
    {$r['productID']}"
    );
    EOT;
                
    $q2=mysql_query($query3};
            };
        };
    };
    оформимл в функцию,с начала вызови update_related_items(30000, 1000,3) найдите где- добавляется товар, после добавления в базу добавляешь строчку update_related_items(5, 1,3)
     
    shaitan_pskov и Buyer нравится это.
Статус темы:
Закрыта.