Задавайте вопросы, мы ответим
Вы не зашли.
Доброго Вам дня. В изучении уткнулся в тупик. Потому и прошу гуру мускул помочь в следующем...
На данный момент есть три таблицы. Возможность подключать четвертую... пятую... (прайсы разных компаний)
1 таблица - `tovar`
Поля: `brend`,`num`,`names`,`price`,`kolvo`,`krat`,`srok`,`img`,`id`
2 таблица - `favorit`
Поля: `brend`,`num`,`names`,`price`,`kolvo`,`krat`,`srok`,`img`,`id`
3 таблица - `analog`
Поля: `num`,`oem`
Организовать поиск, объединяя таблицы по колонкам `num` и `oem`.
В простонароде подключить кроссы (`analog`). Для поиска автозапчастей по номеру, артикулу.
Т.е. если человечище забивает в поиск по артикулу `oem`, то происходит поиск по всем таблицам с выводом равных по `num`
Обычный поиск осилил:
$sql = "SELECT * FROM `favorit` WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) UNION
SELECT * FROM `tovar` WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) LIMIT 20";
А вот кроссы (`analog`) с полями `num` и `oem` прикрутить никак не получается.
*****************************************
"Не стреляйте в тапера, он играет как умеет"
Неактивен
если я правильно понял, то
Неактивен
При вводе данных '$word' происходит поиск в таблице по `oem`. Если есть совпадения, то идет объединение по `num` из всех таблиц...
if (isset($_GET['search'])) {
include('db.php');
$db = new db();
$num = (int) $_GET['num'];
$word = mysql_real_escape_string($_GET['search']);
$word = preg_replace('/ +/', ' ', trim($word));
$word = str_replace(' ', '', $word);
$sql = "SELECT * FROM `favorit` WHERE MATCH (`num`, `oem`) AGAINST ('$word' IN BOOLEAN MODE) UNION
SELECT * FROM `tovar` WHERE MATCH (`num`, `oem`) AGAINST ('$word' IN BOOLEAN MODE) LIMIT 20";
$row = $db->select_list($sql);
if(count($row)) {
$end_result =..........и т.д.
Неактивен
SELECT .. FROM `favorit` join `analog` using(`num`) WHERE условие на `oem`
UNION [all]
SELECT .. FROM `tovar` join `analog` using(`num`) WHERE условие на `oem`
Неактивен
Не подскажете, в каком направлении капать? Может обратиться к кому? Очень ощущается нехватка знаний в данном направлении. Магазинчик автозапчастей собрал. Поиск по артикулу организовал, а вот с кроссами никак. А ведь, я так понимаю, по тому же принципу необходимо делать подключение таблицы с картинками (путь)...
Отредактированно Remyse (12.07.2017 14:48:18)
Неактивен
чтобы получить ответ на вопрос, его нужно сформулировать:
vasya написал:
приводите набор тестовых данных, что вводит пользователь и что должен вернуть запрос
чтобы обрести знание, см https://dev.mysql.com/doc/refman/5.7/en/join.html
Неактивен
vasya написал:
чтобы получить ответ на вопрос, его нужно сформулировать:
vasya написал:
приводите набор тестовых данных, что вводит пользователь и что должен вернуть запрос
чтобы обрести знание, см https://dev.mysql.com/doc/refman/5.7/en/join.html
Мы в разделе для начинающих... Извините за беспокойство... Что бы не флудить можно наверное закрывать. Попробую поискать кто сталкивался с реализацией специфики поиска автозапчастей по номеру запчасти, подключение кроссов и т.д...
Неактивен
При чем тут раздел, если формулировка вашего вопроса требует телепатии для понимая, что вам нужно?
Интересно, чем вызвано упорное нежелание показать желаемое на примере (это как раз характерно для раздела для начинающих)?
Неактивен
vasya написал:
При чем тут раздел, если формулировка вашего вопроса требует телепатии для понимая, что вам нужно?
Интересно, чем вызвано упорное нежелание показать желаемое на примере (это как раз характерно для раздела для начинающих)?
Телепатия заключается в сложности формирования единого сленга для достижения цели вопроса. Я прекрасно понимаю, что мне сложно будет, наверняка объяснить профессиональным языком. Потому и предположил, что проще будет достичь понимания в одноименной теме поиска автозапчастей по номеру и кроссу. Ну и соответственно построения запроса...
"Показать желаемое на примере"... Я не телепат в понимании что Вам показать. Ссылку, код.. (К теме раздела для начинающих)
Неактивен
Похоже Remyse хотел просто поговорить, решение не особенно его интересует.
Неактивен
klow написал:
Похоже Remyse хотел просто поговорить, решение не особенно его интересует.
Вы не правы.. Я пытаюсь сделать это уже три недели. Недостаток инфы.. сами понимаете.. Вот сайт.. https://autolk.ru/
Что от меня требуется? Какую инфу предоставить?
Неактивен
Remyse написал:
"Показать желаемое на примере"... Я не телепат в понимании что Вам показать. Ссылку, код.. (К теме раздела для начинающих)
набор тестовых данных, что вводит пользователь и что должен вернуть запрос
т.е. таблица1, в ней такие данные, таблица2 ...
ищем по .., запрос должен вернуть такой-то результат
для иллюстрации достаточно нескольких строк в каждой таблице
Неактивен
1 таблица - `favorit`
`brend` - AE
`num`- FOL105
`names`- Гидрокомпенсатор
`price`-300
`kolvo`-10
`krat`-1
`srok`-1
`img`-
`id`-10
2 таблица - `tovar`
`brend` - AKITAKA
`num`- 2320-001L
`names`- Опора шаровая
`price`-280
`kolvo`-7
`krat`-1
`srok`-1
`img`-
`id`-19
3 таблица - `analog`
`num`- FOL105
`oem`- 1004443
3 таблица - `analog`
`num`- 2320-001L
`oem`- 5U0407365A
Ищем по номеру 1004443 , выводит результат FOL105 с 1 таблицы и со 2, если такой артикул существует.
При вводе 5U0407365A, выводит результат 2320-001L со 2 таблицы и с 1, если такой артикул существует.
Неактивен
указанный ранее запрос именно это и делает
Неактивен
Не работает..
$sql = "
SELECT `favorit`.* FROM `favorit` join `analog` using(`num`) WHERE `oem`='$word' UNION all
SELECT `tovar`.* FROM `tovar` join `analog` using(`num`) WHERE `oem`='$word'";
Неактивен
что значит не работает?
Неактивен
Вот и я про то же что значит... Когда не работает! При чем перестает работать и по номерам `num` не говоря про кроссы `oem`
Отредактированно Remyse (12.07.2017 18:38:04)
Неактивен
Мы возвращаемся к вопросу о телепатии. "Не работает" - это ошибка или неверный результат (пустой, неполный, избыточный) или ..
Если считаете, что проблема в запросе, то приведите пример аналогичный этому.
Неактивен
Я не считаю что проблема именно в запросе... (недостаточно знаний, что бы так считать), но при запросе
$sql = "SELECT * FROM `favorit` WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) UNION
SELECT * FROM `tovar` WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) LIMIT 20";
по `num` поиск происходит с выдачей результата поиска по таблице.
В вашей версии запроса почему то ни по `num` ни по `oem` результат не выдает.
Пишет: "По вашему запросу: 1004443 ничего не найдено"
Я не смогу привести пример аналогично Вашему.
Давайте наверное прекратим телепатию, так как считаю диалог не конструктивным, хотя и прекрасно понимаю, что Вы желаете помочь таким неумехам... Что поделать.
Неактивен
Добрый вечер. Дабы не плодить темы, хотел поинтересоваться как объединить эти два запроса в один SELECT, исключающий UNION...?
$sql = "SELECT fav.*, MATCH (fav.oem,fav.num) AGAINST ('+$word' IN BOOLEAN MODE) FROM fav, analog WHERE fav.num=analog.num AND MATCH (analog.oem,analog.num) AGAINST ('+$word' IN BOOLEAN MODE) UNION
SELECT tovar.*, MATCH (tovar.oem,tovar.num) AGAINST ('+$word' IN BOOLEAN MODE) FROM tovar, analog WHERE tovar.num=analog.num AND MATCH (analog.oem,analog.num) AGAINST ('+$word' IN BOOLEAN MODE) ORDER BY price ASC";
Спасибо.
Неактивен