Я новичок в php. Не могли бы вы помочь мне найти способ, чтобы правильно организовать следующую задачу:Split Strings и организовать db для отображения продуктов в PHP
Таблица "Продукты"
ID - детали
1 - 1-30,2-134: 6: 0 ;; 2-7: 55 : 0 ;; 1-2,2-8: 25: 0 - где эта строка может быть очень длинным
2 -
3 - 1-360: 17: 0 ;; 1-361: 185: 0
Каждый продукт 1, 2, 3, ... хранятся в db в одном ряду, хотя продукт дополнительно распознается отдельно по размеру и цвету. Вот почему некоторые продукты могут иметь больше размеров и цветов, чем другие. Иногда продукт имеет только один размер, но в некоторых цветах. В таком случае этот один размер не сохраняется в db, а только цвета. Таблица нерегулярно заполнена. Столбец сведений не является обязательным (может быть пустым). Эта колонка сведений состоит, таким образом, например:
1-30,2-134: 6: 0 ;; 2-7: 55: 0 где главный разделитель равен ';;', поэтому эта строка будет разделена на:
1-30,2-134: 6: 0
2-7: 55: 0
Учитывая Frist расщепляется строки, существуют следующие части, чтобы быть расщепляется:
1-30 - первая часть
2 -134 - вторая часть
6 - третья часть
0 - четвертая часть
Ремень, часть четверти и четверга появляются всегда. Иногда появляется вторая часть. Первая часть и вторая часть могут начинаться с 1-XXX или 2-XXX. Третья часть означает количество товаров, находящихся на складе. Четвертая часть не важна и ее можно игнорировать.
Таблица "Тип"
идентификатор - значение
1 - Продукт
2 - Цвет
Таблица "Аргументы"
идентификатор - значение
1 - SR20 H12
2 - SR21 h13
3 - синий
..
30 - SR25 H15
134 - красный
С учетом приведенных выше таблицах, упомянутых в начале примера означает:
1-30 бы средства 1 = продукта, 30 = SR25 H15
2-134 бы средства 2 = цвет, 134 = красный
Не могли бы вы помочь мне подготовиться PHP скрипт, который будет правильно отображать продукты в пути:
продукта 1 - размер: SR25 h15, цвет: красный, на складе: 6
продукт 1 - размер: SR30 h16, цвет: синий, на складе: 13
Продукт 1 - размер: sr35 h20, цвет: розовый, на складе: 2
Продукт 2
Продукт 3 - цвет: белый, на складе 4
Благодаря предложениям Билла я расщепляется fileds по:
$ продуктов = взорваться ("; ; ", $ details);
foreach ...
$ fields = explode (":", $ products);
foreach ...
$ attribs = explode (",", $ fields);
Еогеасп ...
Однако, я не знаю, как я должен использовать:
($ attrib_type, $ attrib_value) = взорваться ("-", $ attribs [0]);
Я также подготовил предварительно загруженную таблицу ассоциаций аргументов, но я не знаю, как ее использовать.
Это мой код:
$ Результаты = mysql_query ("SELECT ID, имя, детали из продуктов") или умереть ('ошибка запроса');
если (mysql_num_rows ($ результат)> 0) {
echo "<table width='780' cellpadding='2' border='1' rules='rows'>";
echo "<th width=50 align='left'>ID</th>";
echo "<th width=350 align='left'>Name</th>";
echo "<th width=380 align='left'>Details</th>";
while($r = mysql_fetch_array($results))
{
echo "<tr>";
echo "<td width=50 align='left'>".$r[0]."</td>";
echo "<td width=350 align='left'>".$r[1]."</td>";
//echo "<td width=350 align='left'>".$r[2]."</td>";
$string = "$r[2]";
$products = explode(';;', $string);
foreach ($products as $p)
{
$fields = explode(':', $p);
foreach ($fields as $f)
{
$attribs = explode(',', $f);
foreach ($attribs as $a)
{
$attrib_type_value = explode('-', $a);
foreach ($attrib_type_value as $t)
{
if ($t[0] == 1 or $t[0] == 2)
{
$query1 = mysql_query("SELECT products_type.id FROM products_type WHERE products_type.id ='$t'")
or die('error query1: ' . mysql_error());
$query2 = mysql_query("SELECT products_arguments.value FROM products_arguments WHERE products_arguments.id = '$t'")
or die('errur query2: ' . mysql_error());
if(mysql_num_rows($query1) > 0)
{
while($r2 = mysql_fetch_array($query1))
{
echo "<tr>
<td width=350 align='left'>".$r2[0]."</td>";
echo "</tr>";
}
}
}
}
}
}
}
echo "</tr>";
}
echo "</table>";
}
Дорогой Билл, спасибо за быстрый ответ. Я забыл упомянуть, что я не разработчик db, и я ничего не могу изменить в таблицах. Я могу основываться только на статусе. Мне нужно найти способ отображения продуктов, которые были помещены в db так, как я описал. Я могу понять, что это может быть снова нормализация и другие стандарты. У вас есть идея, как это можно сделать? – DanielDanielson