Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по синтаксису / Помощь в составлении запроса / 10 сообщений из 10, страница 1 из 1
28.01.2015, 10:52:14
    #38865201
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Здравствуйте еще раз. Помогите пожалуйста в составлении запроса. Есть одна заковырка, которая мне не по силам, буду признателен если свежим взглядом посмотрите.

Запрос с результатом (данные изменены):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
mysql> select agr.number as dogovor, acc.name as fio, acc.phone as tel, acc.mobile as mobile, acc.phone as tel, acc.fax as fax, acc.email as email, acc.pass_sernum as seriya_passp, acc.pass_no as nomer_pasp, acc.pass_issuedate as data_vid_pasp, acc.pass_issuedep as kem_vid_pasp, acc.birthdate as den_rozhd, acc.birthplace as mesto_rozhd, accaddr.address as adres_prozh 
from agreements as agr, accounts as acc, accounts_addr as accaddr 
where agr.uid=acc.uid and agr.uid=accaddr.uid and accaddr.type=1 and agr.uid in (select uid from vgroups where vg_id in (select vg_id from rad00120150113 where '2015-01-13 19:32' between timefrom and timeto and ip = inet_aton('11.11.11.11')));
+------------+------------------------------------------------------+------+------------+------+------+--------------------------+--------------+------------+---------------+---------------------------------------------------------------------+------------+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
| dogovor    | fio                                                  | tel  | mobile     | tel  | fax  | email                    | seriya_passp | nomer_pasp | data_vid_pasp | kem_vid_pasp                                                        | den_rozhd  | mesto_rozhd             | adres_prozh                                                                                                                           |
+------------+------------------------------------------------------+------+------------+------+------+--------------------------+--------------+------------+---------------+---------------------------------------------------------------------+------------+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
| 11111-ДОГ   | Пупкин Максим Иванович                          |      | 855585 |      |      | pupkin@site.ru | 8888         | 201545     | 2001-19-95    | Отд УФМС Рос                              | 1479-91-94 | г.Город            | Россия,край адрпес 8,,индекс                                                         |
+------------+------------------------------------------------------+------+------------+------+------+--------------------------+--------------+------------+---------------+---------------------------------------------------------------------+------------+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.37 sec)

mysql>



Вопрос вот в чем: в таблице accounts_addr есть поле type, которое может иметь значения от 0 до 3. В данном запросе я беру значение "1". Это адрес проживания. Но мне нужен еще и адрес прописки. То есть, если в запросе не указать тип поля - вылезет три одинаковых поля name и так далее, кроме address.

Мне нужно, чтобы результатом запроса стал не только adres_prozh, но еще и adres_propiski

Возможно ли так составить запрос?

З.Ы. Прошу прощения за растянутую страничку и корявый слог: сам учусь. Спасибо.
...
Рейтинг: 0 / 0
28.01.2015, 10:54:42
    #38865205
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Привяжите в запрос ещё одну копию таблицы адресов.
...
Рейтинг: 0 / 0
28.01.2015, 10:54:55
    #38865206
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Вот о чем говорю:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
mysql> select * from accounts_addr where uid = 2604;
+------+------+---------+--------+------+------+-------+--------+----------+------+------------------------------------------------------------------------------------------------------------------------------------------------+----------+-------+
| uid  | type | country | region | area | city | settl | street | building | flat | address                                                                                                                                        | entrance | floor |
+------+------+---------+--------+------+------+-------+--------+----------+------+------------------------------------------------------------------------------------------------------------------------------------------------+----------+-------+
| 2604 |    0 |       1 |     18 |  363 |  151 |     0 |  58685 |        7 | 3080 | Россия,Адрес                                                           |        0 |     0 |
| 2604 |    1 |       1 |     18 |  363 |  151 |     0 |  58683 |     1088 |    0 | Россия,Другой адрес                                                                 |        0 |     0 |
| 2604 |    2 |       1 |     18 |  363 |  151 |     0 |  58683 |     1088 |    0 | Россия,Адрес                                                                  |        0 |     0 |
+------+------+---------+--------+------+------+-------+--------+----------+------+------------------------------------------------------------------------------------------------------------------------------------------------+----------+-------+
3 rows in set (0.00 sec)

mysql> 
...
Рейтинг: 0 / 0
28.01.2015, 10:54:57
    #38865207
Вопрос по синтаксису / Помощь в составлении запроса
Суть того, что ты хочешь - crosstab.
на MySQL, ввиду отсутствия PIVOT-а, реализуется через CASE + GROUP BY
...
Рейтинг: 0 / 0
28.01.2015, 10:56:06
    #38865208
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Добрый Э - ЭхСуть того, что ты хочешь - crosstab.
на MySQL, ввиду отсутствия PIVOT-а, реализуется через CASE + GROUP BY

Спасибо, я почитаю :)
...
Рейтинг: 0 / 0
28.01.2015, 11:08:01
    #38865223
Вопрос по синтаксису / Помощь в составлении запроса
...
Рейтинг: 0 / 0
28.01.2015, 11:15:27
    #38865233
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Добрый Э - Эх,

Спасибо большое!
...
Рейтинг: 0 / 0
28.01.2015, 12:04:02
    #38865321
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Добрый Э - Эх,

Еще раз большое спасибо. Получилось как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> select acc_adr.address as adres_propiski, max(case when acc_adr.type=1 then acc_adr.address else NULL end) as adres_prozhiv from accounts_addr as acc_adr where uid=2536;
+----------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
| adres_propiski                                                                                                 | adres_prozhiv                                                                                              |
+----------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
| Россия,Адрес1                                              | Россия,Адрес2                                           |
+----------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

mysql>
...
Рейтинг: 0 / 0
28.01.2015, 12:12:33
    #38865337
mtsfignya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
Вот так. Вроде разобрался )

select max(case when acc_adr.type=0 then acc_adr.address else NULL end) as adres_prozhiv, max(case when acc_adr.type=1 then acc_adr.address else NULL end) as adres_propiski from accounts_addr as acc_adr where uid=2536;
...
Рейтинг: 0 / 0
29.01.2015, 17:04:35
    #38866968
nwarap
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по синтаксису / Помощь в составлении запроса
SELECT agr.number AS dogovor, acc.name AS fio, acc.phone AS tel, acc.mobile AS mobile, acc.phone AS tel, acc.fax AS fax, acc.email AS email, acc.pass_sernum AS seriya_passp, acc.pass_no AS nomer_pasp, acc.pass_issuedate AS data_vid_pasp, acc.pass_issuedep AS kem_vid_pasp, acc.birthdate AS den_rozhd, acc.birthplace AS mesto_rozhd, accaddr.address AS adres_prozh
, accaddr2.address AS adres_propiski

FROM agreements AS agr, accounts AS acc, accounts_addr AS accaddr , accounts_addr AS accaddr2
WHERE agr.uid=acc.uid AND agr.uid=accaddr.uid AND accaddr.type=1
AND agr.uid=accaddr2.uid AND accaddr2.type=2
AND agr.uid IN (
SELECT uid
FROM vgroups
WHERE vg_id IN (
SELECT vg_id
FROM rad00120150113
WHERE '2015-01-13 19:32' BETWEEN timefrom AND timeto AND ip = INET_ATON('11.11.11.11')
)
);
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по синтаксису / Помощь в составлении запроса / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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