|
lowfuck ↓
|
 |
|
13 Ноябрь, 2011, 11:16:37
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 21 Сила слова: 0
|
'SELECT (SELECT SUM(`amount`) FROM `balance_operations` WHERE `type` = 3 AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `user_id` = 1) - (SELECT SUM(`amount`) FROM `balance_operations` WHERE `type` = 4 AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `user_id` = 1) AS `diff`'
Как сократить эту хуиту?
|
|
|
|
|
Записан
|
|
|
|
|
Faster ↓
|
 |
|
14 Ноябрь, 2011, 04:06:42 , спустя 4 часа 50 минут 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 10
Сообщений: 954 Сила слова: 1.05
|
по всей видимости писать разность сразу в таблицу из которой идет главный селект
|
|
|
|
|
Записан
|
воспитываю дочь. С домами и деревьями - не приставать.
|
|
|
|
phpdude ↓
|
 |
|
14 Ноябрь, 2011, 04:16:06 , спустя 9 минут 24 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
по всей видимости писать разность сразу в таблицу из которой идет главный селект
Бредовый совет =)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
phpdude ↓
|
 |
|
14 Ноябрь, 2011, 04:27:20 , спустя 11 минут 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: д-о-х-у-я! Сила слова: 1.66
|
SELECT SUM('amount') `diff` FROM (
SELECT IF(`type` = 3, `amount`, -`amount`) `diff` FROM `balance_operations` WHERE
`type` IN (3,4) AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `user_id` = 1
) `total`
Думаю как то так будет работать =)
из плюса - не надо будет дважды таблицу проходить как у тебя в примере :-)
ну и если проставить индекс по всем колонкам которые есть в запросе, то думаю будет работать очень быстро на почти любых размерах базы. но тут конечно надо проверять и explain =)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
lowfuck ↓
|
 |
|
14 Ноябрь, 2011, 08:57:16 , спустя 16 часов 29 минут 56 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 21 Сила слова: 0
|
phpdude, спасибо бро!
|
|
|
|
|
Записан
|
|
|
|
|
lowfuck ↓
|
 |
|
14 Ноябрь, 2011, 09:10:15 , спустя 12 минут 59 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 21 Сила слова: 0
|
Заработало так:
SELECT SUM(`diff`) `diff` FROM (
SELECT IF(`type` = 3, `amount`, -`amount`) `diff` FROM `balance_operations` WHERE
`type` IN (3,4) AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `user_id` = 1
) `total`
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
15 Ноябрь, 2011, 11:38:22 , спустя 14 часов 28 минут 7 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
AND YEARWEEK(`date`,3)
сколько раз твердили миру, что функций в where надо избегать например
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
15 Ноябрь, 2011, 02:44:14 , спустя 3 часа 5 минут 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: д-о-х-у-я! Сила слова: 1.66
|
master, почему? :-)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Nyaah ↓
|
 |
|
15 Ноябрь, 2011, 05:41:05 , спустя 2 часа 56 минут 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 34
Сообщений: 522 Сила слова: 6.51
|
дуд нуб )
|
|
|
|
|
Записан
|
Work, buy, consume, die
|
|
|
|
phpdude ↓
|
 |
|
15 Ноябрь, 2011, 06:12:46 , спустя 31 минуту 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
Nyaah, ага :)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
master ↓
|
 |
|
15 Ноябрь, 2011, 08:56:59 , спустя 2 часа 44 минуты 13 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
phpdude,
индексы не используются. сравни на любой таблице с данными
EXPLAIN SELECT * FROM `table` WHERE id=1
EXPLAIN SELECT * FROM `table` WHERE id+1=2
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
15 Ноябрь, 2011, 10:15:27 , спустя 1 час 18 минут 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: д-о-х-у-я! Сила слова: 1.66
|
индексы не используются
спасибо кэп
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
lowfuck ↓
|
 |
|
23 Ноябрь, 2011, 11:27:29 , спустя 8 дней 1 час 12 минут 2 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 21 Сила слова: 0
|
EXPLAIN
Ну и как избавиться от использования функций в данном случае например?
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
23 Ноябрь, 2011, 11:31:08 , спустя 3 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
lowfuck, подготовить данные при инсерте/апдейте. то есть завести колонку которая нужна - неделя года. и по ней выбирать :-)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
lowfuck ↓
|
 |
|
23 Ноябрь, 2011, 11:48:58 , спустя 17 минут 50 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 21 Сила слова: 0
|
phpdude, понял. Ещё вопрос:
Если из псевдотаблицы извлекается одно значения, я могу заапдейтить так:
UPDATE `stat` SET `profit_rur` = (SELECT SUM(`diff`)*0.5 FROM (
SELECT IF(`type` = 3, `amount`, -`amount`) AS `diff` FROM `balance_operations` WHERE
`type` IN (3,4) AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `currency` = "rur" AND `user_id` = 1
) AS `total`) WHERE `user_id` = 1;
Но как мне быть, если я хочу заапдейтить сразу 2:
SELECT SUM(`diff_rur`)*0.5 `total_rur`, SUM(`diff_usd`)*0.5 `total_usd` FROM (
SELECT IF(`currency` = 'rur', IF(`type` = 3, `amount`, -`amount`), 0) AS `diff_rur`,
IF(`currency` = 'usd', IF(`type` = 3, `amount`, -`amount`), 0) AS `diff_usd`
FROM `balance_operations` WHERE
`type` IN (3,4) AND YEARWEEK(`date`,3) = YEARWEEK(NOW(),3) AND `user_id` = 1
) AS `total`;
UPDATE `stat` SET `profit_rur` = `total_rur`, `profit_usd` = `total_usd` WHERE `user_id` = 1;
Хуёво объяснил, надеюсь вы поняли
|
|
|
|
|
Записан
|
|
|
|
|