[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как вывести аналог товаров из базы?
RussianDesigner
Схема сайта такая:
на одном из этапов человек на сайте выбирает товар
в данном случае овощи




user posted image
скриншот



после выбора товара "Картошка обычная" ему выдается информация по выбранному товару
(из базы выводится тип товара, название, сорт товара, цена и тд)
user posted image
скриншот


базы данных называется produktu
таблица в базе называется tovaruall

user posted image


в последних двух колонках код товара и аналог, если такой имеется
аналог берется из прайса ексель предварительно загружаемого в базу
в нём в случае, если аналогичных товаров (т.е. аналогов) несколько, они разделяются наклонным слешем см. последнюю колонку polnuyanalog

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

если есть у кого-то какие-то осмысленные идеи, как решить эту задачу, то подскажите
Valick
Цитата
если аналогичных товаров (т.е. аналогов) несколько, они разделяются наклонным слешем

это противоречит принципу нормализации БД, для аналогов вам необходимо создать отдельную таблицу, в которой будет всего два поля id основного предмета и id аналога и никаких данных через слэш, запятую, либо какой другой разделитель
а из вашей таблицы последние две колонки убрать.

_____________
Стимулятор ~yoomoney - 41001303250491
RussianDesigner
я просто думал
что можно как-то вытащить из ячейки аналоги, перечисляемые через слеш
и для них сделать вывод как и с основным товаром
как это прописать посредством php?
вот в чем вопрос




а то что вы пишите
Цитата
для аналогов вам необходимо создать отдельную таблицу, в которой будет всего два поля id основного предмета и id аналога


будет много прайсов
в прайсе аналоги идут через слеш
просматривать и вручную аналоги заносить в отдельную таблицу это очень хлопотная задача, если товаров тысячи то это просто сизифов труд.
наверняка есть решение прямо из моей таблицы выводить минуя создание новой таблицы
vagrand
RussianDesigner
В принципе можно сделать и не переделывая таблицу:
1. Выберите значение поля polnuyanalog;
2. Сделайте так:


$codes = explode('/', $polnuyanalog);


3. Создайте новый запрос:


...('select * from tovaruall where kod in ("' . join('","', addslashes($codes)) . '")');


На выходе получите аналоги

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Valick
Цитата
наверняка есть решение прямо из моей таблицы выводить

решение есть и оно крайне неправильное (так как придётся всё это разгребать средствами РНР каждый раз) и в конечном счёте это и подобные решения окончательно затянут петлю на вашей шее.
Я же вам предлогаю сделать процедуру разгребания всего один раз, и уже работать с данными на уровне СУРБД.
Цитата
просматривать и вручную аналоги заносить в отдельную таблицу

разве я говорил что это надо делать вручную?

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (RussianDesigner @ 5.08.2014 - 21:48)
просматривать и вручную аналоги заносить в отдельную таблицу это очень хлопотная задача

Ну так автоматизируй... Даешь файл на входе, данные из него заносятся в БД.

PS. Valick всё правильно говорит. Лучше один раз сделать (переделать) правильно, чем потом мучаться постоянно.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vagrand
Valick
Цитата
решение есть и оно крайне неправильное


Если речь идет только о выводе аналогов на странице одного товара, то особой надобности в третей таблице M:M не вижу. Хотя полностью согласен с тем, что подход ТС-а неправильный и когда придет время выводить аналоги для списка товаров, он это сразу поймет.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
RussianDesigner
Значит рассмотрим два подхода
(если вы не против)
начнем с варианта vagrand

код у меня, выводящий информацию такой:

//Делаем выборку из таблицы tovaruall
$resultobrab3 = mysql_query("SELECT * FROM tovaruall WHERE namesort='$namesort' AND nametovar='$nametovar' ");
$myrowobrab3 = mysql_fetch_assoc($resultobrab3);


echo "<strong>Вы выбрали товар:</strong><br><br>";
echo $myrowobrab3["nametovar"];
echo "<br>";
echo $myrowobrab3["namesort"];
echo "<br>"."Цена:".$myrowobrab3["cena"];
echo "<br><br>"."<strong>Описание: </strong>".$myrowobrab3["opisanie"];
echo "<br>"."Код: ".$myrowobrab3["kod"];
echo "<br>"."Аналог: ".$myrowobrab3["polnuyanalog"];


$codes = explode('/', $polnuyanalog);


ошибок не выдало пока не вставил строку:

$resultw = mysql_query ('select * from tovaruall where kod in ("' . join('","', addslashes($codes)) . '")'); 



user posted image
скриншот
Arh
Лучше сразу делай разные таблицы.
Потом захочешь сделать фильтр товаров к примеру и "приплыли" smile.gif

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
vagrand
RussianDesigner

$codes = explode('/', $myrowobrab3["polnuyanalog"]);
...

$resultw = mysql_query ('select * from tovaruall where kod in ("' . join('","', array_map('addslashes', $codes)) . '")');


_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
RussianDesigner
Больше спасибо
вроде бы работает метод, предложенный vagrand
на сегодня всё








единственное сегодня ещё хотелось бы понять смысл этой строчки:
Цитата
$resultw = mysql_query ('select * from tovaruall where kod in ("' . join('","', array_map('addslashes', $codes)) . '")');


select * from tovaruall
тут всё понятно

а дальше в скобках сложновато

тут почитал http://www.php.su/functions/?array_map , но всё равно
понятен смысл строки лишь в общих чертах
RussianDesigner
вот окончательный рабочий код по методу vagrand

  //Делаем выборку  из таблицы tovaruall 
$resultobrab3 = mysql_query("SELECT * FROM tovaruall WHERE namesort='$namesort' AND nametovar='$nametovar' ");
$myrowobrab3 = mysql_fetch_assoc($resultobrab3);


echo "<strong>Вы выбрали товар:</strong><br><br>";
echo $myrowobrab3["nametovar"];
echo "<br>";
echo $myrowobrab3["namesort"];
echo "<br>"."Цена:".$myrowobrab3["cena"];
echo "<br><br>"."<strong>Описание: </strong>".$myrowobrab3["opisanie"];
echo "<br>"."Код: ".$myrowobrab3["kod"];
echo "<br>"."Аналоги: ".$myrowobrab3["polnuyanalog"]."<br>";


$codes = explode('/', $myrowobrab3["polnuyanalog"]);
$resultw = mysql_query ('select * from tovaruall where kod in ("' . join('","', array_map('addslashes', $codes)) . '")');

while($myroww = mysql_fetch_assoc($resultw))
{
echo "<br>".$myroww["nametovar"]." ";
echo $myroww["namesort"];
echo "<br>"."Цена: ".$myroww["cena"];
echo "<br>"."Код: ".$myroww["kod"]."<br>";
}
Kusss
Зря ты упираешься против второй таблицы. И работать с ней легче, чем кастыли писать, причем разный для каждой идеи. Искать, Фильтровать, объединять.

И ещё лучше бы Типы товаров тоже отдельной таблицей сделать.
id - name (Название скажем tovar_type)
И вставлять в поле "nametovtype" id из таблицы tovar_type.
И меню из этой таблицы делать, и количество товаров в разделе вывести легко, и запросы делать проще. Одни плюсы smile.gif

Ещё подкатегории разбить в отдельную таблицу. Это которое Картошка, Огурец и т.д.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.