- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Задача с выборкой из мускла, есть в бд таблица, в которой один из столбцов имеет значения вроде таких http://cropme.ru/s/f/b/l/3acfd546.png мне нужно сделать выборку по нескольким номерам.
Варианты вроде:
работают не совсем правильно потому как при выборке результаты не сортируются по количеству совпадений от большего к меньшему.
Первый вариант так вообще херня, особенно если ему задать %1%, то искать он мне будет и 1 и 16 и 21 айди, что не нужно.
Есть варианты какой нужно делать запрос для вывода результатов с сортировкой по количеству совпадений от большего к меньшему? То есть при выводе результатов сначала идут строки где совпадают три числа, потом два, следом соответственно одно число. Наиболее релевантные. У меня в примере используется три числа в запросе, но их может быть от 1 до 10 к примеру.
Сначала надо сделать правильную схему БД, а потом только запросы.
Если в вашем примере показана колонка из таблицы товаров, содержащая ID категорий, в которые товар входит, то нужна промежуточная таблица связи товаров с категориями.
Задача с выборкой из мускла, есть в бд таблица, в которой один из столбцов имеет значения вроде таких http://cropme.ru/s/f/b/l/3acfd546.png мне нужно сделать выборку по нескольким номерам.
Варианты вроде:
работают не совсем правильно потому как при выборке результаты не сортируются по количеству совпадений от большего к меньшему.
Первый вариант так вообще херня, особенно если ему задать %1%, то искать он мне будет и 1 и 16 и 21 айди, что не нужно.
Есть варианты какой нужно делать запрос для вывода результатов с сортировкой по количеству совпадений от большего к меньшему? То есть при выводе результатов сначала идут строки где совпадают три числа, потом два, следом соответственно одно число. Наиболее релевантные. У меня в примере используется три числа в запросе, но их может быть от 1 до 10 к примеру.
По уму - Вам бы базу перестроить.
Но если нужно тупое и не очень быстрое решение (подходит если база небольшая вполне), то как-то так
Общая мысль - ищите совпадение каждого числа в каждой строке, если находите - присваиваете 1, если нет - присваиваете 0. Сортируете по количеству совпадений (сумме оных).
concat нужен что бы по "1" не искало 16 и 21, тогда озапятив строку с обоих сторон Вы можете искать честные ,1, и найдете только единицы.
Автоматом такой запрос составить несложно, имена полей подставьте свои.
Напомню на всякий случай:
У меня в примере используется три числа в запросе, но их может быть от 1 до 10 к примеру.
:)
Basilisk, да, таблица связей конечно упростила бы решение задачи, но в данной ситуации нужно решить задачу с уже имеющимися условиями.
По уму - Вам бы базу перестроить.
Но если нужно тупое и не очень быстрое решение (подходит если база небольшая вполне), то как-то так
Общая мысль - ищите совпадение каждого числа в каждой строке, если находите - присваиваете 1, если нет - присваиваете 0. Сортируете по количеству совпадений (сумме оных).
concat нужен что бы по "1" не искало 16 и 21, тогда озапятив строку с обоих сторон Вы можете искать честные ,1, и найдете только единицы.
Автоматом такой запрос составить несложно, имена полей подставьте свои.
Спасибо, наиболее простое и в общем быстрое решение. Вопрос задавался на нескольких форумах, но этот вариант мне кажется наиболее оптимальным. Под разное количество айди просто реализовать составление запроса в рабочем скрипте.
Пытался найти, можно ли ваш запрос в sqlite перевести, но найти нужного решения не смог. Вы не знаете?
Спасибо и Вам, решение по скорости почти такое же как и предыдущее и выборка та же, но визуально и по адаптации понравился больше предыдущий вариант. ;)
stik.name, с sqllite практически не знакомы, но по идее locate можно заменить на like или instr функциями, а вместо if-а использовать case. Но наверняка не уверены.
Понял. Ну решили на этом проекте оставить пока так, с вашим вариантом. А для последующих сейчас делаю таблицу связей.
Понял. Ну решили на этом проекте оставить пока так, с вашим вариантом. А для последующих сейчас делаю таблицу связей.
Отличное решение :)
Если myisam, или версия майскл от 5.6, то FULLTEXT индекс.
Иначе sphinx.