|
|
|
| Ситуация такая:
есть база данных в которой записаны товары. Среди этих записей есть товары, различие в которых - только их размер, который можно понять исходя из артикула, чтобы было понятно, приведу пример:
артикул: 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>";
}
|
Собственно, очень прошу помочь. | |
|
|
|
|
|
|
|
для: 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(), ну совсем не к месту. | |
|
|
|
|
|
|
|
для: Dizels
(07.08.2010 в 20:47)
| | Предлагаю сменить структуру базы - сделать таблицу товаров, в которой не будет упоминания о размерах и таблицу размеров, связаны ессно по иду таблицы товаров.
Колво записей узнавай так:
<?php
$result = mysql_query('SELECT COUNT(*) AS `count` FROM `table`');
$row = mysql_fetch_array($result);
$count = $row['count'];
|
| |
|
|
|
|
|
|
|
для: nikita2206
(08.08.2010 в 12:01)
| | Спасибо за ответы. Структуру базы данных менять не могу, так как туда импортируются данные с xml-файлов | |
|
|
|
|
|
|
|
для: Dizels
(08.08.2010 в 13:00)
| | А что xml файл, это беспорядочный набор, который нельзя привести к человеческой структуре? | |
|
|
|
|
|
|
|
для: sim5
(08.08.2010 в 13:07)
| | Да нет, не беспорядочный. Просто он уже дается сторонней фирмой и инфа о размере заложена в артикуле товара, т.е. идет номер артикула, а на конце буква, отвечающая за размер - как я указывал в первом сообщении. Так что как все это записать иначе - я не понимаю. | |
|
|
|
|
|
|
|
для: Dizels
(08.08.2010 в 13:21)
| | 3100025 - это номер артикула одного товара, и он не может одновременно принадлежать и трусам, и майке? А раз так, разве нельзя получить по этим артикулам группы данных принадлежащих одному и тому же товару, записать его в базу под одним id, а в таблицу артикулов поместить сами артикулы? | |
|
|
|
|
|
|
|
для: 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% хлопок'),
|
| |
|
|
|
|
|
|
|
для: 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>';
}
|
Из этого массива нужно получить массив, ключи которого будут содержать вложенные массивы - один, это значение полей общих для всех артикулов, а второй, это массив артикулов и поля специфичные только для этих артикулов. | |
|
|
|
|
|
|
|
для: Dizels
(08.08.2010 в 13:51)
| | Проглядел, что может быть '31007012XL', а значит пример выше будет работать некорректно. Нужно искать в строке. Ваш исходный массив должне быть обязательно отсортирован по артикулу, так, чтобы меньшие значения были в начале (как в этой записи). Тогда:
<?
$a = array(
array('3100701M', 'Безрукавка "Moshulu"', 'белый', 100, 'M', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 98, 0, 13,
'Текстиль 2009', 'M', 'Us Basic', 'джерси, 100% хлопок'),
array('3100701L', 'Безрукавка "Moshulu"', 'белый', 100, 'L', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 178, 0, 13,
'Текстиль 2009', 'L', 'Us Basic', 'джерси, 100% хлопок'),
array('3100701XL', 'Безрукавка "Moshulu"', 'белый', 100, 'XL', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 191, 0, 13,
'Текстиль 2009', 'XL', 'Us Basic', 'джерси, 100% хлопок'),
array('31007012XL', 'Безрукавка "Moshulu"', 'белый', 100, '2XL', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 0, 0, 13,
'Текстиль 2009', '2XL', 'Us Basic', 'джерси, 100% хлопок'),
array('3100711M', 'Безрукавка "Moshulu"', 'белый', 100, 'M', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 98, 0, 13,
'Текстиль 2009', 'M', 'Us Basic', 'джерси, 100% хлопок'),
array('3100711L', 'Безрукавка "Moshulu"', 'белый', 100, 'L', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 178, 0, 13,
'Текстиль 2009', 'L', 'Us Basic', 'джерси, 100% хлопок'),
array('3100711XL', 'Безрукавка "Moshulu"', 'белый', 100, 'XL', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 191, 0, 13,
'Текстиль 2009', 'XL', 'Us Basic', 'джерси, 100% хлопок'),
array('31007112XL', 'Безрукавка "Moshulu"', 'белый', 100, '2XL', 'шелкография, термотрансфер, вышивка',
'Футболка без боковых швов; резинка по линии горловины.', 175, '3100701_a.jpg', 0, 0, 13,
'Текстиль 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);
|
| |
|
|
|
|