SQLinfo.ru - Все о MySQL Highload++ 2017

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.07.2017 13:17:33

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Подключение кроссов с выводом в поиске.

Доброго Вам дня. В изучении уткнулся в тупик. Потому и прошу гуру мускул помочь в следующем...
На данный момент есть три таблицы. Возможность подключать четвертую... пятую... (прайсы разных компаний)
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` прикрутить никак не получается.
*****************************************
"Не стреляйте в тапера, он играет как умеет"

Неактивен

 

#2 12.07.2017 13:30:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

если я правильно понял, то

SELECT * FROM `favorit` join `analog` using(`num`)  WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) UNION
SELECT * FROM `tovar`  join `analog` using(`num`) WHERE MATCH (`num`) AGAINST ('$word' IN BOOLEAN MODE) LIMIT 20

иначе приводите набор тестовых данных, что вводит пользователь и что должен вернуть запрос

Неактивен

 

#3 12.07.2017 13:50:10

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

При вводе данных '$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 =..........и т.д.

Неактивен

 

#4 12.07.2017 13:58:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

SELECT .. FROM `favorit` join `analog` using(`num`)  WHERE условие на `oem`
UNION [all]
SELECT .. FROM `tovar` join `analog` using(`num`)  WHERE условие на `oem`

Неактивен

 

#5 12.07.2017 14:45:18

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

Не подскажете, в каком направлении капать? Может обратиться к кому? Очень ощущается нехватка знаний в данном направлении. Магазинчик автозапчастей собрал. Поиск по артикулу организовал, а вот с кроссами никак. А ведь, я так понимаю, по тому же принципу необходимо делать подключение таблицы с картинками (путь)...

Отредактированно Remyse (12.07.2017 14:48:18)

Неактивен

 

#6 12.07.2017 14:57:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

чтобы получить ответ на вопрос, его нужно сформулировать:

vasya написал:

приводите набор тестовых данных, что вводит пользователь и что должен вернуть запрос

чтобы обрести знание, см https://dev.mysql.com/doc/refman/5.7/en/join.html

Неактивен

 

#7 12.07.2017 15:04:39

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

vasya написал:

чтобы получить ответ на вопрос, его нужно сформулировать:

vasya написал:

приводите набор тестовых данных, что вводит пользователь и что должен вернуть запрос

чтобы обрести знание, см https://dev.mysql.com/doc/refman/5.7/en/join.html

Мы в разделе для начинающих... Извините за беспокойство... Что бы не флудить можно наверное закрывать. Попробую поискать кто сталкивался с реализацией специфики поиска автозапчастей по номеру запчасти, подключение кроссов и т.д...

Неактивен

 

#8 12.07.2017 16:02:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

При чем тут раздел, если формулировка вашего вопроса требует телепатии для понимая, что вам нужно?
Интересно, чем вызвано упорное нежелание показать желаемое на примере (это как раз характерно для раздела для начинающих)?

Неактивен

 

#9 12.07.2017 16:16:46

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

vasya написал:

При чем тут раздел, если формулировка вашего вопроса требует телепатии для понимая, что вам нужно?
Интересно, чем вызвано упорное нежелание показать желаемое на примере (это как раз характерно для раздела для начинающих)?

Телепатия заключается в сложности формирования единого сленга для достижения цели вопроса. Я прекрасно понимаю, что мне сложно будет, наверняка объяснить профессиональным языком. Потому и предположил, что проще будет достичь понимания в одноименной теме поиска автозапчастей по номеру и кроссу. Ну и соответственно построения запроса...

"Показать желаемое на примере"...  Я не телепат в понимании что Вам показать. Ссылку, код.. (К теме раздела для начинающих)

Неактивен

 

#10 12.07.2017 16:18:26

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 236

Re: Подключение кроссов с выводом в поиске.

Похоже Remyse хотел просто поговорить, решение не особенно его интересует. smile

Неактивен

 

#11 12.07.2017 16:22:08

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

klow написал:

Похоже Remyse хотел просто поговорить, решение не особенно его интересует. smile

Вы не правы.. Я пытаюсь сделать это уже три недели. Недостаток инфы.. сами понимаете.. Вот сайт.. https://autolk.ru/
Что от меня требуется? Какую инфу предоставить?

Неактивен

 

#12 12.07.2017 16:28:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

Remyse написал:

"Показать желаемое на примере"...  Я не телепат в понимании что Вам показать. Ссылку, код.. (К теме раздела для начинающих)

набор тестовых данных, что вводит пользователь и что должен вернуть запрос
т.е. таблица1, в ней такие данные, таблица2 ...
ищем по .., запрос должен вернуть такой-то результат
для иллюстрации достаточно нескольких строк в каждой таблице

Неактивен

 

#13 12.07.2017 16:44:19

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

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, если такой артикул существует.

Неактивен

 

#14 12.07.2017 16:57:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

указанный ранее запрос именно это и делает

SELECT `favorit`.* FROM `favorit` join `analog` using(`num`)  WHERE `oem`='2320-001L'
UNION all
SELECT `tovar`.* FROM `tovar` join `analog` using(`num`)  WHERE `oem`='2320-001L'

Неактивен

 

#15 12.07.2017 17:12:51

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

Не работает..
   $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'";

Неактивен

 

#16 12.07.2017 17:34:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

что значит не работает?

mysql> select * from tovar\G
*************************** 1. row ***************************
brend: AKITAKA
  num: 2320-001L
names: Опора шаровая
price: 280
kolvo: 7
 krat: 1
 srok: 1
  img: NULL
   id: 19
1 row in set (0.00 sec)

mysql> select * from favorit\G
*************************** 1. row ***************************
brend: AE
  num: FOL105
names: Гидрокомпенсатор
price: 300
kolvo: 10
 krat: 1
 srok: 1
  img: NULL
   id: 10
1 row in set (0.00 sec)

mysql> select * from analog;
+--------+---------+
| num    | oem     |
+--------+---------+
| FOL105 | 1004443 |
+--------+---------+
1 row in set (0.00 sec)

mysql> SELECT `favorit`.* FROM `favorit` join `analog` using(`num`)  WHERE `oem`='1004443'
UNION all
SELECT `tovar`.* FROM `tovar` join `analog` using(`num`)  WHERE `oem`='1004443'\G
*************************** 1. row ***************************
brend: AE
  num: FOL105
names: Гидрокомпенсатор
price: 300
kolvo: 10
 krat: 1
 srok: 1
  img: NULL
   id: 10
1 row in set (0.00 sec)
 

Неактивен

 

#17 12.07.2017 18:34:34

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

Вот и я про то же что значит... Когда не работает! При чем перестает работать и по номерам `num` не говоря про кроссы `oem`

Отредактированно Remyse (12.07.2017 18:38:04)

Неактивен

 

#18 12.07.2017 18:53:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Подключение кроссов с выводом в поиске.

Мы возвращаемся к вопросу о телепатии. "Не работает" - это ошибка или неверный результат (пустой, неполный, избыточный) или ..
Если считаете, что проблема в запросе, то приведите пример аналогичный этому.

Неактивен

 

#19 12.07.2017 19:51:52

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

Я не считаю что проблема именно в запросе... (недостаточно знаний, что бы так считать), но при запросе
$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 ничего не найдено"
Я не смогу привести пример аналогично Вашему.
Давайте наверное прекратим телепатию, так как считаю диалог не конструктивным, хотя и прекрасно понимаю, что Вы желаете помочь таким неумехам... Что поделать.

Неактивен

 

#20 01.08.2017 20:57:24

Remyse
Участник
Зарегистрирован: 12.07.2017
Сообщений: 11

Re: Подключение кроссов с выводом в поиске.

Добрый вечер. Дабы не плодить темы, хотел поинтересоваться как объединить эти два запроса в один 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";
Спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson