SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.04.2012 13:36:15

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Как извлечь данные из таблицы по нескольким значениям в ячейке

Поисковики мне не помогли. Надеюсь на вашу помощь.
Задача такова. Есть таблица
CREATE TABLE IF NOT EXISTS `objects`
+---+------------+----------+----------+-------+----------+
|  id | description | add_date | exp_date | enable | url_name  |
+---+------------+----------+----------+-------+----------+
|  1 | desc1         | 08.12.12  | 12.08.14 |  Y       | url1          |
+---+------------+----------+----------+-------+----------+
|  2 | desc2         | 12.11.12  | 28.12.13 |  Y       | url2          |
+---+------------+----------+----------+-------+----------+
|  3 | desc3        | 06.12.12  | 31.11.15  | N       | url3         |
+---+------------+----------+----------+-------+----------+
|  4 | desc4        | 12.08.12  | 11.12.13  | Y       | url4         |
+---+------------+----------+----------+-------+----------+
|  5 | desc5         | 10.06.12  | 12.23.16 |  N        | url5         |
+---+------------+----------+----------+-------+----------+
|  6 | desc6         | 09.11.12  | 12.12.14 |  Y        | url6         |
+---+------------+----------+----------+-------+----------+

Мне нужно выбрать строки `description`="desc8", `description`="desc2", `description`="desc5", `url_name`="url6", `url_name`="url1"

Но так чтобы выбралось то что существует, если допустим `description`="desc8" - НЕ СУЩЕСТВУЕТ возвращалась не ошибка, а данные с учетом других СУЩЕСТВУЮЩИХ значений.

Отредактированно Отто Нурманис (07.04.2012 13:55:05)

Неактивен

 

#2 07.04.2012 13:41:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Что значит "выделить"? Речь идёт про выбрать?

SELECT * FROM `objects` WHERE `description`IN ('desc8', 'desc2', 'desc5') OR `url_name` IN ('url6', 'url1'); - оно?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 07.04.2012 13:43:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

select * from `objects` where `description`="desc8" or `description`="desc2" or ...

Неактивен

 

#4 07.04.2012 13:47:36

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

deadka написал:

Что значит "выделить"? Речь идёт про выбрать?

SELECT * FROM `objects` WHERE `description`IN ('desc8', 'desc2', 'desc5') OR `url_name` IN ('url6', 'url1'); - оно?

Да. выделить значит - SELECT. Прошу прощения smile
Спасибо, это похоже на "это"! Но меня смущает OR, то есть если он найдет совпадения по DESCRIPTION то URL_NAME он уже не будет учитывать?? А если поставить AND то должно все совпасть с точностью, а если не совпадет вернет "пустоту" sad Так же??

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

Отредактированно Отто Нурманис (07.04.2012 13:51:21)

Неактивен

 

#5 07.04.2012 13:56:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Отто Нурманис написал:

Спасибо, это похоже на "это"! Но меня смущает OR, то есть если он найдет совпадения по DESCRIPTION то URL_NAME он уже не будет учитывать?? А если поставить AND то должно все совпасть с точностью, а если не совпадет вернет "пустоту" sad Так же??

А Вы проверьте wink. Отвечать на вопрос, привязанный к конкретным числам и значениям куда проще, чем на абстрактный smile.

Касательно самого запроса - если Вам нужно, чтобы в строке было "попадание" и в url и в description, то попробуйте
SELECT * FROM `objects` WHERE `description`IN ('desc8', 'desc2', 'desc5') AND `url_name` IN ('url6', 'url1');

Если опять не то, то приведите ту выборку, которую Вы хотите получить из данных Вашей таблицы.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 07.04.2012 14:00:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Отто Нурманис написал:

Спасибо, это похоже на "это"! Но меня смущает OR, то есть если он найдет совпадения по DESCRIPTION то URL_NAME он уже не будет учитывать??

Смотря что вы подразумеваете под учитывать. Если бы вам было нужно, чтобы строка соответствовала `url_name`="url1" и при этом должно быть `description`="desc1", то да не будет учитывать и вернет строку при соответствии одному из значений.
А в вашей постановке задачи or работает правильно.

Неактивен

 

#7 07.04.2012 14:00:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Опять опоздал smile

Неактивен

 

#8 07.04.2012 14:09:14

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

deadka и vasya спасибо Вам большое!

РАБОТАЕТ:

SELECT * FROM `objects` WHERE `description`IN ('desc8', 'desc2', 'desc5') OR `url_name` IN ('url6', 'url1');


НЕ РАБОТАЕТ:
SELECT * FROM `objects` WHERE `description`IN ('desc8', 'desc2', 'desc5') AND `url_name` IN ('url6', 'url1');


Почему не знаю. Хотелось бы узнать, но пока некогда, чуть позже хочу вникнуть. Спасибо еще раз!

Неактивен

 

#9 07.04.2012 14:18:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Второй естественно не работает, так как в таблице нет строк с значениями ('desc8','url6'), ('desc8','url1') и так далее.

Неактивен

 

#10 07.04.2012 15:09:20

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Уважаемые можно я вас еще помучаю??? Извините, у меня очень мало времени и с MySQL это будет единственная задача все остальное это моя сфера (Ajax, CSS, HTML Немножко PHP), поэтому сильно на изучение MySQL не хочу сейчас отвлекаться.
Прошу помочь если можно. Сейчас я дам ооочень длинный запрос в БД. От него СУБД MySQL в шоке. и вместо 20-30 записей почему-то выдает 4236 страниц по 30 записей на странице, даже не хочу считать сколько это. НО ПРИ ЭТОМ вообщем записей в базе не больше 100 шт.

SELECT object_cityes.cyr_name_city,object_cityes.tra_name_city, object_types.cyr_name_type,object_types.tra_name_type, categories_object.id,categories_object.title_page,categories_object.description_page, categories_object.keyword_page,categories_object.views,categories_object.title,categories_object.body, categories_object.index_foto,categories_object.index_description,categories_object.add_date, categories_object.exp_date,categories_object.enable,categories_object.url_name,categories_object.type_id, categories_object.city_id,categories_object_extra.minimal_amount_people,categories_object_extra.maximum_amount_people,categories_object_extra.round_yare FROM categories_object,object_cityes,object_types,categories_object_extra WHERE categories_object.city_id=object_cityes.id_city and categories_object.type_id=object_types.id_type and categories_object.id=categories_object_extra.id_obj  AND categories_object_extra.round_yare IN ('Y','N') OR object_cityes.id_city IN ('1','2') OR object_types.id_type IN ('1','3') AND categories_object.enable='Y' AND categories_object.exp_date > NOW() ORDER BY categories_object.add_date DESC;


Тут соединяется несколько таблиц по одному айди. Я так понимаю это из-за неправильной склейки таблиц может быть. Почему столько записей дубликатов мне выдает????

Отредактированно Отто Нурманис (07.04.2012 15:21:41)

Неактивен

 

#11 07.04.2012 15:39:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Скорее из-за неправильных or
Сформулируйте словами какие записи по каким условиям должны быть выбраны.

Неактивен

 

#12 07.04.2012 16:02:57

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Есть 4 таблицы:

`categories_object`:
| id | title_page | description_page | keyword_page | views | title | body | index_foto | index_description | add_date | exp_date | enable | url_name | type_id | city_id | last_view

`object_cityes`:
| id_city | cyr_name_city | tra_name_city | description_city

`object_types`:
| id_type | cyr_name_type | tra_name_type | description_type

`categories_object_extra`:
| id_obj | minimal_amount_people | maximum_amount_people | round_yare | amountall | amount1 | amount2 | amount3 | fromsea | heating | endday | fulldesc


Строки, которые нужно склеить по совпадениям в этих полях из таблиц:
categories_object.type_id=object_types.id_type, categories_object.city_id=object_cityes.id_city, categories_object.id=categories_object_extra.id_obj

Из получившегося нужно выбрать:
categories_object.enable='Y' - только те записи, которые имеют флажок Y
И
categories_object.exp_date > NOW() - и не старая дата
Это неизменная часть ^^^^

И будет еще добавляться во WHERE скриптом выборка, которую я обсуждал выше
`id`IN (1, 2, 3) OR `url_name` IN ('url6', 'url1')

Неактивен

 

#13 07.04.2012 16:14:15

Отто Нурманис
Участник
Зарегистрирован: 07.04.2012
Сообщений: 10

Re: Как извлечь данные из таблицы по нескольким значениям в ячейке

Извините за беспокойство. Сам себя заставил подумать когда начал излагать здесь свою "проблему" нашел решение вопроса вроде бы. вот эту часть взять в скобки (`id`IN (1, 2, 3) OR `url_name` IN ('url6', 'url1')) по крайней мере уже не миллион записей. буду тестить уже дальше smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson