|
|
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
Добрый день! Имеется такой запрос: Код: sql 1. Таблица discounts: id - PRIMARY KEY = 65 discount_ids - VARCHAR(9) = "1,2,3,4,5" В чем проблема: поле discount_ids - это просто текст, уже содержащий цифры через запятую. Т.е. подзапрос вернет только одну строку "1,2,3,4,5", но не список строк! Почему-то основной запрос (SELECT * FROM users WHERE id IN) делает выборку только по первой цифре (возможно MySQL преобразует полученные строки в INTEGER?). А как можно получить все 5 строк? Можно ли сделать такую выборку одним запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 12:41:04 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
Можно, но это изврат. Код: sql 1. Код: sql 1. В любом случае забудьте про индексы и быстродействие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 12:49:15 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
miksoft, да, спасибо FIND_IN_SET сработал! Код: sql 1. Но и WHERE id IN() с подзапросом тоже обходит всю таблицу users... Наверное лучше сделаю 2 запроса - WHERE id IN(1,2,3,4,5) на прямую использует индексы на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:01:19 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
А вот хранили бы данные правильно - был бы и один запрос, и быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:02:17 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
miksoft, авторА вот хранили бы данные правильно - был бы и один запрос, и быстро. Дык, выходит не рационально как-то. Тут один юзер - одина строка. А так на каждого юзера - 5 строк в бд нужно бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:07:25 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
e_moonА так на каждого юзера - 5 строк в бд нужно бы.Вот это как раз правильно. Хорошо еще, что у вас ситуация еще довольно простая. А более сложных запросах такое разделение на две части может быть либо невозможно, либо очень затруднительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:25:33 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
e_moon, Добрый день. Как бы Mysql - это РСУБД, поэтому так и хранят. Это вам не NoSQL хранилища. Что-то такая тема уже раз 2 или 3 всплывает. Примеры: http://www.sql.ru/forum/1090503/svyazi-kluchi-metody-hraneniya http://www.sql.ru/forum/1090379/proverka-peresecheniya-dvuh-mnozhestv-na-letu С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:29:45 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Но что меня смущает: в таблице кроме двух нужных в данном запросе полей - еще куча. Вот структура таблицы: id | discount_ids | amount | date_start | date_end Сейчас строки такие: 65 | 1,2,3,4,5 | 100 | 2014-05-01 | 2014-05-31 А получается нужно так?! 1 | 65 | 5 | 100 | 2014-05-01 | 2014-05-31 2 | 65 | 4 | 100 | 2014-05-01 | 2014-05-31 3 | 65 | 3 | 100 | 2014-05-01 | 2014-05-31 4 | 65 | 2 | 100 | 2014-05-01 | 2014-05-31 5 | 65 | 1 | 100 | 2014-05-01 | 2014-05-31 Выходит выбор между "физический размер VS скорость работы"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:43:33 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
e_moonА получается нужно так?!Нет, связь нужно выносить в отдельную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:47:33 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
biwed.ruЧто-то такая тема уже раз 2 или 3 всплывает.она тут постоянно всплывает, привыкайте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 13:55:36 |
|
||
|
Использование ( WHERE id IN () )
|
|||
|---|---|---|---|
|
#18+
e_moon, Добрый день. e_moon1 | 65 | 5 | 100 | 2014-05-01 | 2014-05-31 2 | 65 | 4 | 100 | 2014-05-01 | 2014-05-31 3 | 65 | 3 | 100 | 2014-05-01 | 2014-05-31 4 | 65 | 2 | 100 | 2014-05-01 | 2014-05-31 5 | 65 | 1 | 100 | 2014-05-01 | 2014-05-31 Так это же измерение Ральфа Кимбалла второго типа. Лучше почитайте http://en.wikipedia.org/wiki/Slowly_changing_dimension Основное предназначение использовать при проектировании Data Ware House. С уважением, biwed.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2014, 15:10:09 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=180&tid=1834938]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 262ms |

| 0 / 0 |
