|
|
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста, как правильно оформить запрос... Есть база в MySQL, одна из таблиц которой ежедневно пополняется информацией о продажах товаров. Каждый товар имеет уникальный код Структура таблицы My_table : ( KOD Char(7), код товара NAME Char(70), наименование товара CENA Numeric(8,4), цена REAL Numeric(4), продано единиц товара DATA Date, дата продажи ... ) Код товара формируется из группы (2 первых символа), подгруппы (2 след.) и кода товара в подгруппе (3 последних). Требуется сделать суммарную выборку за период с Date1 до Date2, например по нескольким разным группам, или подгруппам, или конкретным товарам. Пробовал так: SELECT KOD, NAME, REAL as SUM(REAL), SUMMA as SUM(REAL*CENA), ... FROM My_table WHERE DATA between Date1 and Date2 and KOD IN("01", "02", "0308", "0402123") GROUP BY KOD ORDER BY KOD Но функция IN не понимает, что товар с кодом "0201045", например, принадлежит группе "02", т.е. удовлетворяет условию. Перечислить в условии весь список 7-ми значных кодов требуемых товаров не представляется возможным. Как это можно сделать ? P.S. в фоксе такой запрос из dbf таблицы с оператором IN работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2005, 21:36 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
есть прекрасный оператор like ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2005, 22:22 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
Еще есть left, right (побыстрее чем like) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 09:30 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
В случае c LIKE придется перечислять: WHERE (Kod LIKE "01%" OR Kod LIKE "02%" OR Kod LIKE "0308%" OR Kod LIKE "0402123") В случае LEFT видимо аналогично. Можно ли уместить в одном операторе ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 12:06 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
Посмотри в сторону регулярных выражений, например используй функции REGEXP или RLIKE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 02:39 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
max(id)Посмотри в сторону регулярных выражений, например используй функции REGEXP или RLIKE. Запрос будет выглядеть так: SELECT KOD, NAME, REAL as SUM(REAL), SUMMA as SUM(REAL*CENA), ... FROM My_table WHERE DATA between Date1 and Date2 and KOD REGEXP "^01|^02|^0308|^0402123" GROUP BY KOD ORDER BY KOD Спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 19:08 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
А как у RLIKE со скоростью, по сравнению с LIKE?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 21:47 |
|
||
|
Условие WHERE в SELECT
|
|||
|---|---|---|---|
|
#18+
DocAlА как у RLIKE со скоростью, по сравнению с LIKE?... [sky@sky ~]$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5052 to server version: 4.1.8-standard-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. если правильно использовать like то гораздо быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 21:58 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=667&tid=1854414]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 363ms |

| 0 / 0 |
