[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать поиск товаров по полю kod и optkod
Страницы: 1, 2, 3, 4, 5, 6, 7
RussianDesigner
Новая таблица tovaruall, та же что и в теме http://phpforum.su/index.php?showtopic=82950
только поле kod сделал пока неуникальным (т.к. оно в данном случае может быть пустым ) и поле polnuyanalog заменил на optkod


В этой таблице сделана подвязка кодов товаров в магазине kod со складскими кодами optkod. Т.е. каждый товар сначала получает код на складе (либо код склада 1, либо код склада2 соответственно opt1.. и opt2..)
а потом, если товар отгружаеттся не только со склада, но и с магазина, ему присваивают магазинный номер, т.е. в таблице это поле kod
Т.о., если товара в магазине нет, но он есть на складе, то он будет иметь лишь складской номер, т.е. optkod

Задача. Надо сделать так, чтобы при поиске товара выдавало результат
в двух случаях: 1. если известен опт код, выдавало из базы оптовые позиции и проверяло есть ли ещё и такой товар в магазине. 2. и наоборот, если ищем по магазинному коду, то выдавало магазинный товар и ещё оптовый.
и в том и в другом случае надо, чтобы ещё проверяло по колонке optkod и если этот optkod присутствует и в других строках, то выдавало ещё и другие товары с этим опт кодом

так например, если картошка в базе в первой строке имеет код k1 и оптовые коды opt1k1/opt2k01, то это значит что картошка есть и в магазине и на двух оптовых складах.
при поиске по запросу k1 должно выдавать их оптовые коды opt1k1/opt2k01
а также проверить и выдать, что этим оптовым кодам ещё и соответствуют позиции в базе в с id37 и id55 т.к. видно из скриншота базы, что хотя у них и магазинные коды k5 и k6, Но по полю optkod совпадение
это говорит, что в базе это и есть аналоги нашей искомой картошки



user posted image


скриншот вебстраницы на данный момент
user posted image


код, выводящий эту страницу:
  //Делаем выборку  из таблицы 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"];
if (!empty($myrowobrab3["optkod"])) {
echo "<br>"."Оптовые коды: ".$myrowobrab3["optkod"]."<br>";
}
else echo "<br>"."В optkod нет данных";
inpost
WHERE `optkod` = 'код'

Или я что-то не понял, какой код конкретно ты передаёшь в запрос?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
RussianDesigner
код, выводящий эту страницу в примере сверху - это код, который построил простейшую страницу,
а надо, чтобы выдавало ещё и аналоги,
если имеются в других строках

аналогами является товар, если у него совпададает один из optkod

и причем ещё надо учитывать то, что поиск может быть как по optkodу так и просто по kodу
inpost
WHERE `kod` = $_POST['search'] OR optkod = $_POST['search']
Найдется и то и другое.

Если optkod ищется по части строки, а не полной, то тут 2 варианта:
1) Говнокод - LIKE '%$_POST['search']%'
2) Про - переписать под нормальную форму, где будет отдельная таблица с привязкой optkod для товара. То есть если у товара 2 optkod, то в доп.таблице будет 2 записи вида: id-товара и optkod. И поиск будет идти уже по второй таблице.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
RussianDesigner
ну во первых
Цитата
WHERE `optkod` = 'код'

в данном случае это невозможно т.к. kod и optkod это разные величины
опткод никогда не будет равен опткоду - имеет разный формат записи
например:
kod это k6, k2, p2
а optkod opt1k6,opt2k02,opt1p2


Цитата
Если optkod ищется по части строки, а не полной, то тут 2 варианта:


мне бы любой рабочий, и желательно чтобы понять его

ато я недопонимаю
этого ohmy.gif :
Цитата
1) Говнокод - LIKE '%$_POST['search']%'
2) Про - переписать под нормальную форму, где будет отдельная таблица с привязкой optkod для товара. То есть если у товара 2 optkod, то в доп.таблице будет 2 записи вида: id-товара и optkod. И поиск будет идти уже по второй таблице.
RussianDesigner
Цитата (inpost @ 16.08.2014 - 17:49)
WHERE `kod` = $_POST['search'] OR optkod = $_POST['search']
Найдется и то и другое.

Если optkod ищется по части строки, а не полной, то тут 2 варианта:
1) Говнокод - LIKE '%$_POST['search']%'
2) Про - переписать под нормальную форму, где будет отдельная таблица с привязкой optkod для товара. То есть если у товара 2 optkod, то в доп.таблице будет 2 записи вида: id-товара и optkod. И поиск будет идти уже по второй таблице.

Цитата
И поиск будет идти уже по второй таблице.

не пойму зачем создавать под данные ещё одно поле, если эти данные уже имеются
Valick
Цитата
не пойму зачем создавать под данные ещё одно поле, если эти данные уже имеются

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

_____________
Стимулятор ~yoomoney - 41001303250491
RussianDesigner
я только за

тем более, если мне растолкуют как правильно я двумя руками за
RussianDesigner
LIKE '%$_POST['search']%'

это куда написать?

я так понял, LIKE это значит "наподобие"
Valick
RussianDesigner, что такое нормализация БД растолкует вам гугл, а еще лучше книги по реляционным БД купленные в магазине. На форуме помогут разобраться с кокретными нюансами, никто не будет перепечатывать вам сюда 200 листов текста.


_____________
Стимулятор ~yoomoney - 41001303250491
RussianDesigner
Цитата
На форуме помогут разобраться с кокретными нюансами, никто не будет перепечатывать вам сюда 200 листов текста.

безусловно всё это понятно, я подумал что тут дело не в 200 листах, а просто в возможности натолкнуть меня на правильную дорогу или чуть чуть подсобить с кодом

Извиняюсь, сегодня, суббота, расслабился
соберусь с мыслями напишу
Valick
Цитата
просто в возможности натолкнуть меня на правильную дорогу

я вас и наталкиваю, я вам уже давно сказал про неправильную архитектуру БД, всё, дальше уже ничего не может быть пока не исправите это.
Представьте что вы строите дом на кривом фундаменте (а архитектура БД это и есть фундамент вашего приложения), первый второй этаж сойдёт, но чем больше этажей тем больше у вас будет проблем, так и с кодом абсолютно то же самое.
Вы наверно не читали рассказ "Если бы программисты строили дома"

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

что бы построить нормальный красивый многоэтажный дом

Руководствуясь правилами нормализации БД, вы можете построить грамотную архитектуру БД даже не зная SQL. А вот когда выучите SQL, то поймёте почему надо делать именно так а не иначе.

_____________
Стимулятор ~yoomoney - 41001303250491
inpost
RussianDesigner
Куда писать LIKE - открываешь мануал и читаешь про него, как им пользоваться...
Нормальная форма - открываешь учебник по mysql и читаешь этот раздел. Или гуглишь, благо в гугле всё уже давно разжевано.

На форум ты пришел узнать, куда копать дальше. Указав на слабое место ты теперь можешь смело идти и зубрить его.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

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