Нужна помощь (mysql_query)

12
artalex
На сайте с 08.12.2005
Offline
144
742

Добрый день.

Ситуация такая:

В mysql таблице 'catalog' есть поля 'name','link', 'categ' (все поля varchar).

В поле 'categ' я пишу ID категорий через запятую. Например, если это одна категория, - то в э

том поле будет "12" если несколько, то, например, "2,12,13,17,22,34"

Теперь мне нужно написать запрос, который выберет из этой таблицы записи для категории с ID = 2

(посылыю ее Гетом)

Я написал (неверно написал)


$catid = $_GET['catid'];
mysql_query("SELECT * FROM catalog WHERE categ LIKE '%$catid%' ORDER BY name");

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

Что ищу:

Как-то превратить содержимое categ в массив (разбив по запятым), и проверять есть ли в этом массиве нужный id...

Кто может помочь?

A
На сайте с 04.03.2011
Offline
20
#1

categ like '$catid,%' or categ like '%,$catid' or categ like '%,$catid,%' or categ='$catid'

asdqwe добавил 07.03.2011 в 16:53

artalex:


$catid = $_GET['catid'];
mysql_query("SELECT * FROM catalog WHERE categ LIKE '%$catid%' ORDER BY name");

только Вас как-нибудь жестко хакнут через такого рода вещи, надо сделать $catid = intval($_GET['catid']); хотя бы

artalex
На сайте с 08.12.2005
Offline
144
#2

asdqwe, спасибо, - сам недотуркал... :)

Не очень, конечно, все это красиво, но работает... :)

A
На сайте с 04.03.2011
Offline
20
#3

были бы в mysql регэкспы, можно было бы написать rlike '(^|,)$catid($|,)' - было бы красивее, но не факт, что быстрее

artalex
На сайте с 08.12.2005
Offline
144
#4

а я еще копал в сторону типа поля "SET", - но так и "не докопал"

maldivec
На сайте с 04.11.2008
Offline
160
#5

Искать ID через like это то ее извращение... да и делать такие связи через перечисление тоже.

Сделайте доп. таблицу связей и выборки будут быстрее и проще работать.

Лучше дернуть две таблицы поиском по ключевому или идексному полю типа INT, чем одну через LIKE по VARCHAR.

Я уж не говорю об удобстве редактирования этих категорий...

orphelin
На сайте с 02.07.2006
Offline
261
#6

artalex, меняйте структуру таблиц. в будущем с такой схемой проблем много будет. проще на начальном этапе сделать все правильно.

A
На сайте с 04.03.2011
Offline
20
#7

(соглашаясь с предыдущими авторами)

И может Вам лучше какой-нибудь готовый движок использовать, чтобы не тратить силы на изобретение велосипеда

artalex
На сайте с 08.12.2005
Offline
144
#8

Беда в том, что база мне уже "досталась в таком виде"...

Приходится извращаться. (я просто для примера показал структуру, - на самом деле там довольно сложно уже перелопатить все). Буду все-таки делать LIKE по текстовому (varchar) полю... Спасибо за помощь...

[Удален]
#9

я может не совсем конкретно понял..

но если у вас список 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");

B
На сайте с 08.03.2010
Offline
63
#10

Вообще никогда нельзя делать запросы в базу, используя данные, полученные напрямую от юзера, т.е. GET параметры. Всегда нужно проверять.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий