Привет. Есть две таблицы: 1-product(id, name); 1, пиво 2, сигареты 3, журналы 2-customer(id, name, email, address, product, city) 1, Вася, vacya@mail.ru, adres1, пиво | сигареты, Киев 2, Петя, petya@mail.ru, adres2, пиво | журналы, Москва 3, Коля, kolya@mail.ru, adres3, журналы, Киев Первая таблица содержит названия продуктов; вторая таблица описывает заказщика (имя, адрес и т.д.) плюс в колонке product записаны через разделитель (символ " | ") продукты, которые использует заказщик. Нужно выбрать всех заказщиков, которые используют один из продуктов, например журнал или пиво... Причем я из таблицы product получаю только id`шник продукта... Поскольку продукты пишутся в одно поле через символ-разделитель, то наверное нужно использовать оператор LIKE... Как построить запрос? SELECT customer.*, product.name FROM customer, product WHERE ..... вот тут-то мозгов и не хватает как вытащить по id`шнику название продукта и запихать его в LIKE? Код (Text): SELECT customer.*, product.name FROM customer, product WHERE customer.product LIKE product.id=1 такой запрос ничего не возвращает
Andrey K. WHERE POSITION(product.name, customer.product) POSITION() возвращает не ноль, если первая строка-аргумент содержится во второй. Но елки, как же это тормозить-то будет...
Dagdamor что-то не получается использовать POSITION, выдает ошибку: Код (Text): SELECT * FROM customer WHERE POSITION( "пиво", product) Ответ MySQL: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' product)' at line 3 И в мануалах не могу найти синтаксис этого оператора, не подскажешь где найти описание POSITION`а? Нашел описание синтаксиса: POSITION (str IN fld)
http://dev.mysql.com/doc/refman/5.0/en/ ... n_position http://dev.mysql.com/doc/refman/5.0/en/ ... ion_locate
с синтаксисом разобрались, теперь следующая непонятка: как в POSITION вставить зачение из другой таблицы? Код (Text): SELECT customer. * , product.name FROM customer, product WHERE POSITION(product.id=3 IN customer.product) Такой запрос ничего не возвращает... можно ли выражение product.id=3 присвоить какой-либо переменной и потом подставить эту переменную в POSITION?
Вроде так должно быть, если знаем, что конкретно ищем: [sql] SELECT customer. * , product.name FROM customer, product WHERE POSITION("журналы" IN customer.product) [/sql] Ну или так тож должно, когда только id: [sql] SELECT customer. * , product.name FROM customer, product WHERE POSITION(product.name IN customer.product) AND product.id=3; [/sql]
Структура не годится. Первая таблица содержит названия продуктов; вторая таблица описывает заказщика (имя, адрес и т.д.) плюс в колонке product записаны через разделитель (символ " | ") продукты, которые использует заказщик. это надо делать один раз при добавлении записи и создавать отдельную таблицу связи многие ко многим product_id customer_id
armadillo согласен, структура не продумана... но она уже такая есть, хотя задумываюсь над реструктизацией