Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.7570
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 21.11.2015, 01:56   #1
stikname
true coder;
 
Аватар для stikname
 
Регистрация: 10.05.2013
Сообщений: 28
Бабло: $8575
Отправить сообщение для stikname с помощью ICQ
Question Подскажите с запросом для выборки из MySQL

Задача с выборкой из мускла, есть в бд таблица, в которой один из столбцов имеет значения вроде таких http://cropme.ru/s/f/b/l/3acfd546.png мне нужно сделать выборку по нескольким номерам.

Варианты вроде:
Код:
SELECT * FROM `table` WHERE cat LIKE '%10%' or cat LIKE '%25%' or cat LIKE '%27%';
SELECT * FROM `table` WHERE FIND_IN_SET('10', cat) or FIND_IN_SET('25', cat) or FIND_IN_SET('27', cat);
работают не совсем правильно потому как при выборке результаты не сортируются по количеству совпадений от большего к меньшему.
Первый вариант так вообще херня, особенно если ему задать %1%, то искать он мне будет и 1 и 16 и 21 айди, что не нужно.

Есть варианты какой нужно делать запрос для вывода результатов с сортировкой по количеству совпадений от большего к меньшему?
__________________
http://stik.name - Think different

Последний раз редактировалось stikname; 21.11.2015 в 02:02.
stikname вне форума  
Старый 21.11.2015, 02:11   #2
Nikola_N
$
 
Регистрация: 05.04.2007
Сообщений: 564
Бабло: $86825
По умолчанию

Sphinx попробуй прикрутить.
Nikola_N вне форума  
Старый 21.11.2015, 02:16   #3
stikname
true coder;
 
Аватар для stikname
 
Регистрация: 10.05.2013
Сообщений: 28
Бабло: $8575
ТС -->
Отправить сообщение для stikname с помощью ICQ
автор темы ТС По умолчанию

Последний абзац первого сообщения я не дописал, последний абзац должен быть таким:

Цитата:
Есть варианты какой нужно делать запрос для вывода результатов с сортировкой по количеству совпадений от большего к меньшему? То есть при выводе результатов сначала идут строки где совпадают три числа, потом два, следом соответственно одно число. Наиболее релевантные. У меня в примере используется три числа в запросе, но их может быть от 1 до 10 к примеру.
Так наиболее подробно объясняется задача и вопрос.

Цитата:
Сообщение от Nikola_N Посмотреть сообщение
Sphinx попробуй прикрутить.
Мне кажется слишком жирно для такой задачи.
__________________
http://stik.name - Think different
stikname вне форума  
Старый 21.11.2015, 02:20   #4
веломан
Senior Member
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 5,935
Бабло: $700265
По умолчанию

а нормальную форму нельзя чтоли сделать?
без неё хуйня получится, как ни крути
веломан вне форума  
Старый 21.11.2015, 02:21   #5
stikname
true coder;
 
Аватар для stikname
 
Регистрация: 10.05.2013
Сообщений: 28
Бабло: $8575
ТС -->
Отправить сообщение для stikname с помощью ICQ
автор темы ТС По умолчанию

Цитата:
Сообщение от веломан Посмотреть сообщение
а нормальную форму нельзя чтоли сделать?
без неё хуйня получится, как ни крути
форму чего ?
__________________
http://stik.name - Think different
stikname вне форума  
Старый 21.11.2015, 03:18   #6
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 620
Бабло: $89330
По умолчанию

сделать еще одну табицу cats
[id первой таблицы][цифра]

и выбирать так
http://sqlfiddle.com/#!9/12b03/13

или перейти на постгрес и использовать поля типа Array.
editeur вне форума  
Старый 21.11.2015, 03:22   #7
stikname
true coder;
 
Аватар для stikname
 
Регистрация: 10.05.2013
Сообщений: 28
Бабло: $8575
ТС -->
Отправить сообщение для stikname с помощью ICQ
автор темы ТС По умолчанию

Понял, речь о нормальных формах. Ну в данной ситуации она просто отсутствует, потому и задача так стоит. Архитектуру переделывать не хотели. Хотя по всей видимости придется.
__________________
http://stik.name - Think different
stikname вне форума  
Старый 21.11.2015, 03:30   #8
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 879
Бабло: $177835
Отправить сообщение для lorien с помощью Skype™
По умолчанию

1) Сколько записей в таблице?
2) Сколько записей обычно попадает в выборку?
3) Сколько фильтров-номеров обычно в выборке используется (запросы LIKE)?
4) Сколько максимально может быть использовано фильтров-номеров в одном запросе?
5) Cколько всего различных значений присутствует в полях cat (кол-во категорий, по сути)?
6) Сколько таких операций поиска проводится в минуту?

Цитата:
Первый вариант так вообще херня, особенно если ему задать %1%, то искать он мне будет и 1 и 16 и 21 айди, что не нужно.
Решается добавлением запятых в начало и конец значения в колонке cat и запросами типа LIKE '%,число,%'
lorien вне форума  
Старый 21.11.2015, 03:47   #9
веломан
Senior Member
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 5,935
Бабло: $700265
По умолчанию

Цитата:
Сообщение от stikname Посмотреть сообщение
Понял, речь о нормальных формах. Ну в данной ситуации она просто отсутствует, потому и задача так стоит. Архитектуру переделывать не хотели. Хотя по всей видимости придется.
ну можно через memory table замутить, если дальше не планируешь проектом заниматься
сначала скидываешь в неё норм.форму, потом достаёшь, что надо
прокатит, если данных не сильно много
веломан вне форума  
Старый 21.11.2015, 03:48   #10
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 620
Бабло: $89330
По умолчанию

Цитата:
Сообщение от stikname Посмотреть сообщение
Понял, речь о нормальных формах. Ну в данной ситуации она просто отсутствует, потому и задача так стоит. Архитектуру переделывать не хотели. Хотя по всей видимости придется.
"Братишка, я тебе покушать принес"
http://sqlfiddle.com/#!9/f6193/22

Последний раз редактировалось editeur; 21.11.2015 в 03:57.
editeur вне форума  
Закрытая тема



Опции темы
Опции просмотра