Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как выводить товары схожего артикула
 
 автор: Dizels   (07.08.2010 в 20:47)   письмо автору
 
 

Ситуация такая:
есть база данных в которой записаны товары. Среди этих записей есть товары, различие в которых - только их размер, который можно понять исходя из артикула, чтобы было понятно, приведу пример:
артикул: 3100025S - футболка размера S
артикул: 3100025L - футболка размера L
артикул: 3100025XL - футболка размера XL
артикул: 3100025XXL - футболка размера XXL

Собственно, сейчас все эти товары выводятся по порядку и все. А нужно, чтобы вот такие товары выводились как один, а при переходе на него уже можно было выбрать размер.

Вот файл вывода товаров, который есть сейчас:

<?php                
        
// узнаем колво записей в бд
        
$ko mysql_num_rows(mysql_query("SELECT `id` FROM `textil_tovar`"));
        
        
// генерируем случайное число в диапазоне 1 - $ko
        
$rnd rand(1,$ko);
        
        
                
$query "SELECT * FROM textil_tovar order by rand() LIMIT 5";
                if(
$pgs mysql_query($query))
                {            
                    echo 
"<table border='0'  width='100%' align='center' cellspacing='5' cellpadding='5'>";
                    
// Так как запрос возвращает несколько строк, применяем цикл
                    
while($form mysql_fetch_array($pgs))
                    {
                        echo 
"
                        <tr> 
                            <td valign='top'><img src='../preview/"
.$form['photo']."'></td> 
                            <td valign='top'>
                                <p align='left'><a href='tovar.php?rub="
.$rub."&id=".$form['id']."'><b>".$form['name']."</b></a></p>
                                <p align='justify'>Артикул: "
.$form['tov_id']."</p>
                                <p align='justify'>Цена: <font size='4' color='red'> "
.$form['price']." </font> руб.</p>
                                <hr>
                            </td> 
                        </tr>"
;                        
                    }
                    echo 
"</table></center>";                
                }


Собственно, очень прошу помочь.

  Ответить  
 
 автор: sim5   (08.08.2010 в 02:38)   письмо автору
 
   для: Dizels   (07.08.2010 в 20:47)
 

А нужно чтобы товар Т имел поле А описывающее его артикулы (где-то в разделе mysql форума недавно о подобном было, ищите, читайте).

А к чему это:

// узнаем колво записей в бд
$ko = mysql_num_rows(mysql_query("SELECT `id` FROM `textil_tovar`"));
// генерируем случайное число в диапазоне 1 - $ko
$rnd = rand(1,$ko);

оно где-то используется? А это - mysql_fetch_array(), ну совсем не к месту.

  Ответить  
 
 автор: nikita2206   (08.08.2010 в 12:01)   письмо автору
 
   для: Dizels   (07.08.2010 в 20:47)
 

Предлагаю сменить структуру базы - сделать таблицу товаров, в которой не будет упоминания о размерах и таблицу размеров, связаны ессно по иду таблицы товаров.

Колво записей узнавай так:
<?php
$result 
mysql_query('SELECT COUNT(*) AS `count` FROM `table`');
$row    mysql_fetch_array($result);
$count $row['count'];

  Ответить  
 
 автор: Dizels   (08.08.2010 в 13:00)   письмо автору
 
   для: nikita2206   (08.08.2010 в 12:01)
 

Спасибо за ответы. Структуру базы данных менять не могу, так как туда импортируются данные с xml-файлов

  Ответить  
 
 автор: sim5   (08.08.2010 в 13:07)   письмо автору
 
   для: Dizels   (08.08.2010 в 13:00)
 

А что xml файл, это беспорядочный набор, который нельзя привести к человеческой структуре?

  Ответить  
 
 автор: Dizels   (08.08.2010 в 13:21)   письмо автору
 
   для: sim5   (08.08.2010 в 13:07)
 

Да нет, не беспорядочный. Просто он уже дается сторонней фирмой и инфа о размере заложена в артикуле товара, т.е. идет номер артикула, а на конце буква, отвечающая за размер - как я указывал в первом сообщении. Так что как все это записать иначе - я не понимаю.

  Ответить  
 
 автор: sim5   (08.08.2010 в 13:25)   письмо автору
 
   для: Dizels   (08.08.2010 в 13:21)
 

3100025 - это номер артикула одного товара, и он не может одновременно принадлежать и трусам, и майке? А раз так, разве нельзя получить по этим артикулам группы данных принадлежащих одному и тому же товару, записать его в базу под одним id, а в таблицу артикулов поместить сами артикулы?

  Ответить  
 
 автор: Dizels   (08.08.2010 в 13:51)   письмо автору
 
   для: sim5   (08.08.2010 в 13:25)
 

В том то и дело, что артикул не 3100025, а 3100025S, 3100025L, и т.д., вот для примера бекап товаров:
(635, '3100701M', 'Безрукавка "Moshulu"', 'белый', '', 0, 100, 'M', 'шелкография, термотрансфер, вышивка', 'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 98, 0, 13, 'Текстиль 2009', 'M', 'Us Basic', 'джерси, 100% хлопок'),
(636, '3100701L', 'Безрукавка "Moshulu"', 'белый', '', 0, 100, 'L', 'шелкография, термотрансфер, вышивка', 'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 178, 0, 13, 'Текстиль 2009', 'L', 'Us Basic', 'джерси, 100% хлопок'),
(637, '3100701XL', 'Безрукавка "Moshulu"', 'белый', '', 0, 100, 'XL', 'шелкография, термотрансфер, вышивка', 'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 191, 0, 13, 'Текстиль 2009', 'XL', 'Us Basic', 'джерси, 100% хлопок'),
(638, '31007012XL', 'Безрукавка "Moshulu"', 'белый', '', 0, 100, '2XL', 'шелкография, термотрансфер, вышивка', 'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 0, 0, 13, 'Текстиль 2009', '2XL', 'Us Basic', 'джерси, 100% хлопок'),

  Ответить  
 
 автор: sim5   (08.08.2010 в 14:03)   письмо автору
 
   для: Dizels   (08.08.2010 в 13:51)
 

Обматерить? Ну зачем такие портянки по горизонтали вставлять, вы думаете их удобно читать? Нежуто нельзя было разбить по длине.

Есть такое понятие как регулярные выражения, которыми можно извлечь только цифры из строки. Но в вашем случае можно и без этого обойтись, так как у вас строка у которой цифры в начале, а литеры в конце. Проверьте:
<?
$a 
= array('3100701M''3100701L''3100701XL''31007012XL');
$n 0;
foreach(
$a as $val) {
  if(!
$n || intval($n) != intval($val)) $n $val;
  if(
intval($n) == intval($val)) echo $n ' = ' $val '<br>';
}

Из этого массива нужно получить массив, ключи которого будут содержать вложенные массивы - один, это значение полей общих для всех артикулов, а второй, это массив артикулов и поля специфичные только для этих артикулов.

  Ответить  
 
 автор: sim5   (08.08.2010 в 15:14)   письмо автору
 
   для: Dizels   (08.08.2010 в 13:51)
 

Проглядел, что может быть '31007012XL', а значит пример выше будет работать некорректно. Нужно искать в строке. Ваш исходный массив должне быть обязательно отсортирован по артикулу, так, чтобы меньшие значения были в начале (как в этой записи). Тогда:
<?
$a 
= array(
array(
'3100701M''Безрукавка "Moshulu"''белый'100'M''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'98013
      
'Текстиль 2009''M''Us Basic''джерси, 100% хлопок'), 
array(
'3100701L''Безрукавка "Moshulu"''белый'100'L''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'178013
      
'Текстиль 2009''L''Us Basic''джерси, 100% хлопок'), 
array(
'3100701XL''Безрукавка "Moshulu"''белый'100'XL''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'191013
      
'Текстиль 2009''XL''Us Basic''джерси, 100% хлопок'), 
array(
'31007012XL''Безрукавка "Moshulu"''белый'100'2XL''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'0013
      
'Текстиль 2009''2XL''Us Basic''джерси, 100% хлопок'),
array(
'3100711M''Безрукавка "Moshulu"''белый'100'M''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'98013
      
'Текстиль 2009''M''Us Basic''джерси, 100% хлопок'), 
array(
'3100711L''Безрукавка "Moshulu"''белый'100'L''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'178013
      
'Текстиль 2009''L''Us Basic''джерси, 100% хлопок'), 
array(
'3100711XL''Безрукавка "Moshulu"''белый'100'XL''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'191013
      
'Текстиль 2009''XL''Us Basic''джерси, 100% хлопок'), 
array(
'31007112XL''Безрукавка "Moshulu"''белый'100'2XL''шелкография, термотрансфер, вышивка'
      
'Футболка без боковых швов; резинка по линии горловины.'175'3100701_a.jpg'0013
      
'Текстиль 2009''2XL''Us Basic''джерси, 100% хлопок')
);

$n 0;
foreach(
$a as $val) {
  if(!
$n || strpos($val[0], $n)===false) {
    
$n = (string)intval($val[0]);
    
$m[$n][0] = array($val[1],$val[2],$val[3],$val[5],$val[6],$val[7],$val[10],$val[11],$val[12],$val[14],$val[15]);
  }
  
$m[$n][1][] = array($val[0],$val[4],$val[8],$val[9]);


echo 
'<pre>';
print_r($m);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования