Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с выборкой (связный подзапрос) / 8 сообщений из 8, страница 1 из 1
17.02.2005, 17:38
    #32921675
_Sandr_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
есть табличка calls - статистика дзвонков мини-атс:

mysql> describe calls;
+-------------+-------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------------------+-------+
| date | datetime | | | 0000-00-00 00:00:00 | |
| duration | int(11) | | | 0 | |
| type | tinyint(4) | | | 0 | |
| source | varchar(15) | | | | |
| destination | varchar(15) | | | | |
+-------------+-------------+------+-----+---------------------+-------+

mysql> SELECT * FROM calls LIMIT 10;
+---------------------+----------+------+------------+-------------+
| date | duration | type | source | destination |
+---------------------+----------+------+------------+-------------+
| 2005-01-01 19:09:26 | 114 | 3 | 0333390009 | 252183 |
| 2005-01-01 20:36:10 | 41 | 3 | 0333390011 | 80677505374 |
| 2005-01-02 20:01:10 | 549 | 3 | 0333390003 | 430194 |
| 2005-01-02 22:55:03 | 772 | 3 | 0333390008 | 267727 |
| 2005-01-03 07:31:32 | 16 | 3 | 0333390008 | 235415 |
| 2005-01-03 11:14:02 | 178 | 3 | 0333390009 | 283701 |
| 2005-01-03 11:17:35 | 13 | 3 | 0333390009 | 235415 |
| 2005-01-03 11:19:19 | 21 | 3 | 0333390009 | 004 |
| 2005-01-03 11:21:30 | 7 | 3 | 0333390009 | 283721 |
| 2005-01-03 11:22:00 | 66 | 3 | 0333390009 | 283701 |
+---------------------+----------+------+------------+-------------+

если дзвонки осуществляются на городские номера, то в destination будет просто
городской номер абонента. Если же дзвонок на мобилу или межгород, то в destination
пишется номер в формате:

8 + <код города, страны или оператора сотов. связи> + <номер абонента>

ШАс что б подсчитать межгород и мобилы делаю выборки для каждого номера_абонента (те которые
в source) и по каждому коду_оператора_или_города:

SELECT source, SUM(duration) FROM `calls`
WHERE source LIKE 'номер_абонента_1' AND destination LIKE '8код_оператора_или_города%'

или

SELECT source, SUM(duration) FROM `calls`
WHERE source LIKE '0333%' AND destination LIKE '8код_оператора_или_города%'
GROUP BY source

Коди городов и операторов известны! поместил все коды в табличку pr_mobile

mysql> describe pr_mobile;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(10) | | | | |
| prefix | varchar(5) | | | | |
+--------+-------------+------+-----+---------+-------+

mysql> SELECT * FROM pr_mobile;
+--------+--------+
| name | prefix |
+--------+--------+
| опер_1 | код_1 |
| опер_2 | код_2 |
| опер_3 | код_3 |
| опер_4 | код_4 |
+--------+--------+


ВОПРОС:
Как сделать так что б одним запросом прощитать дзвонки на каждое значения
pr_mobile.prefix отдельно???

Я так понимаю должно быть что то типа:

SELECT * FROM calls WHERE destination LIKE '(SELECT prefix FROM pr_mobile)%'
Даный запрос не робочий.. это так ход мыслей... с MySQL недавно дружу так что прошу не копать сразу :)
...
Рейтинг: 0 / 0
18.02.2005, 07:55
    #32922210
Welly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
_Sandr_
ВОПРОС:
Как сделать так что б одним запросом прощитать дзвонки на каждое значения
pr_mobile.prefix отдельно???

Я так понимаю должно быть что то типа:

SELECT * FROM calls WHERE destination LIKE '(SELECT prefix FROM pr_mobile)%'
Даный запрос не робочий..

Добавляем в таблицу pr_mobile строчку с полем prefix='local', тогда сгруппировать по префиксам можно будет следующим запросом. Здесь 7 - количество цифр в номере местного телефона.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
  pr_mobile.prefix,
  sum(calls.duration)
FROM 
  calls, pr_mobile 
WHERE 
  case 
    when length(calls.destination)= 7  then 'local'
    when length(calls.destination)> 7  then left(calls.destination,length(pr_mobile.prefix))
  end = pr_mobile.prefix
group by
  pr_mobile.prefix
...
Рейтинг: 0 / 0
19.02.2005, 23:20
    #32924885
_Sandr_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
Welly _Sandr_
ВОПРОС:
Как сделать так что б одним запросом прощитать дзвонки на каждое значения
pr_mobile.prefix отдельно???

Я так понимаю должно быть что то типа:

SELECT * FROM calls WHERE destination LIKE '(SELECT prefix FROM pr_mobile)%'
Даный запрос не робочий..

Добавляем в таблицу pr_mobile строчку с полем prefix='local', тогда сгруппировать по префиксам можно будет следующим запросом. Здесь 7 - количество цифр в номере местного телефона.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
  pr_mobile.prefix,
  sum(calls.duration)
FROM 
  calls, pr_mobile 
WHERE 
  case 
    when length(calls.destination)= 7  then 'local'
    when length(calls.destination)> 7  then left(calls.destination,length(pr_mobile.prefix))
  end = pr_mobile.prefix
group by
  pr_mobile.prefix


Спасибо огромнейшее!!! столько намучался с этим....

походу спрошу еще кое-чего... А можно ли сделать, так что б это все просчитывалось еще и по каждому номеру отдельно, а не по всем сразу??? То есть, скажем, если сделать еще табличку numbers и вынести туда все номера, которые используются, а потом по каждому из них считать вот эту штуку (кто сколько наговорил).
...
Рейтинг: 0 / 0
21.02.2005, 13:35
    #32926069
Welly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
_Sandr_походу спрошу еще кое-чего... А можно ли сделать, так что б это все просчитывалось еще и по каждому номеру отдельно, а не по всем сразу??? То есть, скажем, если сделать еще табличку numbers и вынести туда все номера, которые используются, а потом по каждому из них считать вот эту штуку (кто сколько наговорил).
GROUP BY по номеру телефона
...
Рейтинг: 0 / 0
22.02.2005, 12:53
    #32928243
_Sandr_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
Welly _Sandr_походу спрошу еще кое-чего... А можно ли сделать, так что б это все просчитывалось еще и по каждому номеру отдельно, а не по всем сразу??? То есть, скажем, если сделать еще табличку numbers и вынести туда все номера, которые используются, а потом по каждому из них считать вот эту штуку (кто сколько наговорил).
GROUP BY по номеру телефона

Ну GROUP BY я то могу сделать, когда все розговори считаю...
а я имел в виду как к этому запросу пристроить шоб он все номера просчитал.

SELECT
pr_mobile.prefix,
sum(calls.duration)
FROM
calls, pr_mobile
WHERE
case
when length(calls.destination)=7 then 'local'
when length(calls.destination)>7 then left(calls.destination,length(pr_mobile.prefix))
end = pr_mobile.prefix
group by
pr_mobile.prefix


GROUP BY по номеру телефона здесь уже не прикрутишь???
...
Рейтинг: 0 / 0
24.02.2005, 13:09
    #32931059
Welly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
_Sandr_Ну GROUP BY я то могу сделать, когда все розговори считаю...
А чего тогда не хватает?


а я имел в виду как к этому запросу пристроить шоб он все номера просчитал.
А зачем, если это можно сделать и без него? И под "просчитал" что подразумевается? Количество звонков, суммарное время по каждому номеру или что?


GROUP BY по номеру телефона здесь уже не прикрутишь???


Why not?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
  pr_mobile.prefix,
  calls.destination,
  sum(calls.duration)
FROM 
  calls, pr_mobile 
WHERE 
  case 
    when length(calls.destination)= 7  then 'local'
    when length(calls.destination)> 7  then left(calls.destination,length(pr_mobile.prefix))
  end = pr_mobile.prefix
group by
  pr_mobile.prefix, calls.destination
Но только зачем??? ;)
...
Рейтинг: 0 / 0
24.02.2005, 17:55
    #32932004
_Sandr_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
Welly _Sandr_Ну GROUP BY я то могу сделать, когда все розговори считаю...
А чего тогда не хватает?


а я имел в виду как к этому запросу пристроить шоб он все номера просчитал.
А зачем, если это можно сделать и без него? И под "просчитал" что подразумевается? Количество звонков, суммарное время по каждому номеру или что?


GROUP BY по номеру телефона здесь уже не прикрутишь???


Why not?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
  pr_mobile.prefix,
  calls.destination,
  sum(calls.duration)
FROM 
  calls, pr_mobile 
WHERE 
  case 
    when length(calls.destination)= 7  then 'local'
    when length(calls.destination)> 7  then left(calls.destination,length(pr_mobile.prefix))
  end = pr_mobile.prefix
group by
  pr_mobile.prefix, calls.destination
Но только зачем??? ;)
Правильно незачем :)
там не по destination а по source надо.
Я могу сделать так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
  pr_mobile.prefix,
  sum(calls.duration)
FROM 
  calls, pr_mobile 
WHERE 
  (case 
    when length(calls.destination)= 7  then 'local'
    when length(calls.destination)> 7  then left(calls.destination,length(pr_mobile.prefix))
  end = pr_mobile.prefix)
AND
  (calls.source='номер телефона')
group by
  pr_mobile.prefix

но таких 'номер телефона' есть несколько.. как автоматом по каждому сделать предыдущий запрос??
...
Рейтинг: 0 / 0
25.02.2005, 10:16
    #32932659
Welly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с выборкой (связный подзапрос)
_Sandr_Правильно незачем :)
там не по destination а по source надо.

Гм, а в замене destination на source есть какие-то проблемы?

Если надо строго по нескольким телефонам, то сделать можно так:
1. использовать в where: calls.source in ('num1','num2'...),
2. создать таблицу нужных номеров и сджойнить с исходным запросом
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с выборкой (связный подзапрос) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]