- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день.
Ситуация такая:
В mysql таблице 'catalog' есть поля 'name','link', 'categ' (все поля varchar).
В поле 'categ' я пишу ID категорий через запятую. Например, если это одна категория, - то в э
том поле будет "12" если несколько, то, например, "2,12,13,17,22,34"
Теперь мне нужно написать запрос, который выберет из этой таблицы записи для категории с ID = 2
(посылыю ее Гетом)
Я написал (неверно написал)
То есть, моя идея была в том, чтоб найти в поле категорий "вхождение" нужной мне категории... - так, в примере выше для категории 2 - зацепит все, где есть двойка...
Что ищу:
Как-то превратить содержимое categ в массив (разбив по запятым), и проверять есть ли в этом массиве нужный id...
Кто может помочь?
categ like '$catid,%' or categ like '%,$catid' or categ like '%,$catid,%' or categ='$catid'
asdqwe добавил 07.03.2011 в 16:53
только Вас как-нибудь жестко хакнут через такого рода вещи, надо сделать $catid = intval($_GET['catid']); хотя бы
asdqwe, спасибо, - сам недотуркал... :)
Не очень, конечно, все это красиво, но работает... :)
были бы в mysql регэкспы, можно было бы написать rlike '(^|,)$catid($|,)' - было бы красивее, но не факт, что быстрее
а я еще копал в сторону типа поля "SET", - но так и "не докопал"
Искать ID через like это то ее извращение... да и делать такие связи через перечисление тоже.
Сделайте доп. таблицу связей и выборки будут быстрее и проще работать.
Лучше дернуть две таблицы поиском по ключевому или идексному полю типа INT, чем одну через LIKE по VARCHAR.
Я уж не говорю об удобстве редактирования этих категорий...
artalex, меняйте структуру таблиц. в будущем с такой схемой проблем много будет. проще на начальном этапе сделать все правильно.
(соглашаясь с предыдущими авторами)
И может Вам лучше какой-нибудь готовый движок использовать, чтобы не тратить силы на изобретение велосипеда
Беда в том, что база мне уже "досталась в таком виде"...
Приходится извращаться. (я просто для примера показал структуру, - на самом деле там довольно сложно уже перелопатить все). Буду все-таки делать LIKE по текстовому (varchar) полю... Спасибо за помощь...
я может не совсем конкретно понял..
но если у вас список id, через запятую, что можно написать:
mysql_query("SELECT * FROM catalog WHERE categ IN($catid) ORDER BY name");
в $catid представлены данные типа:
$catid = '1,2,3,4,5';
то он вытащит список данных соответствующие этим id...
а если у вас просто:
$catid = 2;
то запрос просто будет
mysql_query("SELECT * FROM catalog WHERE categ = $catid");
Вообще никогда нельзя делать запросы в базу, используя данные, полученные напрямую от юзера, т.е. GET параметры. Всегда нужно проверять.