Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как составить запрос?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Траблы
span4ez
Отправлено: 08 Июля, 2013 - 18:15:40
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


Помог: 0 раз(а)




Здравствуйте. Требуется помощь гуру надо составить запрос для двух таблиц

таблица 1:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `type_a` (
  2.   `type_zayav` text NOT NULL,
  3.   `adres` text NOT NULL,
  4.   `sostoyanie` text NOT NULL,
  5.   `date` date NOT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7.  
  8. --
  9. -- Дамп данных таблицы `type_a`
  10. --
  11.  
  12. INSERT INTO `type_a` (`type_zayav`, `adres`, `sostoyanie`, `date`) VALUES
  13. ('Внутр.Задача', '43', 'Назначена', '2013-07-02'),
  14. ('Внутр.Задача', '43', 'Принята', '2013-07-03'),
  15. ('Внутр.Задача', '43', 'Завершена', '2013-07-04'),
  16. ('Внутр.Задача', '43', 'Одобрена', '2013-07-04'),
  17. ('Внутр.Задача', '56', 'Назначена', '2013-07-02'),
  18. ('Внутр.Задача', '56', 'Принята', '2013-07-03'),
  19. ('Внутр.Задача', '56', 'Завершена', '2013-07-04'),
  20. ('Внутр.Задача', '56', 'Одобрена', '2013-07-05');


таблица 2:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `type_b` (
  2.   `type_zayav` text NOT NULL,
  3.   `adres` text NOT NULL,
  4.   `sostoyanie` text NOT NULL,
  5.   `date` date NOT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7.  
  8. --
  9. -- Дамп данных таблицы `type_b`
  10. --
  11.  
  12. INSERT INTO `type_b` (`type_zayav`, `adres`, `sostoyanie`, `date`) VALUES
  13. ('ЗаявкаИТ', '18', 'Назначена', '2013-07-02'),
  14. ('ЗаявкаИТ', '398', 'Назначена', '2013-07-04'),
  15. ('ЗаявкаИТ', '398', 'Принята', '2013-07-04'),
  16. ('ЗаявкаИТ', '447', 'Назначена', '2013-07-02'),
  17. ('ЗаявкаИТ', '474', 'Назначена', '2013-07-03'),
  18. ('ЗаявкаИТ', '474', 'Принята', '2013-07-03'),
  19. ('ЗаявкаИТ', '474', 'Завершена', '2013-07-04'),
  20. ('ЗаявкаИТ', '475', 'Назначена', '2013-07-03'),
  21. ('ЗаявкаИТ', '475', 'Принята', '2013-07-05'),
  22. ('ЗаявкаИТ', '475', 'Завершена', '2013-07-06');


Надо чтобы вывод был след образом:


ТипЗаявки Ссылка Назначено_дата Завершена_дата
Внутр.Задача 43 2013-07-02 2013-07-04
Внутр.Задача 56 2013-07-02 2013-07-04
ЗаявкаИТ 18 2013-07-02
ЗаявкаИТ 398 2013-07-04
ЗаявкаИТ 447 2013-07-02
ЗаявкаИТ 474 2013-07-03 2013-07-04
ЗаявкаИТ 475 2013-07-03 2013-07-06
 
 Top
esterio
Отправлено: 08 Июля, 2013 - 18:25:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




UNION чтоли
 
 Top
span4ez
Отправлено: 08 Июля, 2013 - 18:26:43
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


Помог: 0 раз(а)




esterio пишет:
UNION чтоли
если честно безпонятия просто написано что надо сделать одним запросом и вывести. А каким там уже методом это не кого не волнует.
 
 Top
esterio
Отправлено: 08 Июля, 2013 - 18:32:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `type_zayav`, `adres`, `sostoyanie`, `date` FROM `type_a`
  2. UNION
  3. SELECT `type_zayav`, `adres`, `sostoyanie`, `date` FROM `type_b`

Цитата:
_http://sqlfiddle.com/#!2/172a1/1/0

(Отредактировано автором: 08 Июля, 2013 - 18:33:19)

 
 Top
span4ez
Отправлено: 08 Июля, 2013 - 18:50:08
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


Помог: 0 раз(а)




esterio пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `type_zayav`, `adres`, `sostoyanie`, `date` FROM `type_a`
  2. UNION
  3. SELECT `type_zayav`, `adres`, `sostoyanie`, `date` FROM `type_b`

Цитата:
_http://sqlfiddle.com/#!2/172a1/1/0


А как теперь объединить одинаковые поля ссылки по номерам и вывести дату получения и дату завершения в одну таблицу?

Вид таблицы:

|| ТипЗаявки || Ссылка || Назначена_дата || Завершена_дата ||

(Отредактировано автором: 08 Июля, 2013 - 18:55:31)

 
 Top
AlexAnder
Отправлено: 08 Июля, 2013 - 19:10:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `type_zayav` AS `type`, `adres` AS `address`, `date` AS `start`,
  2. (SELECT `date` FROM `type_a` WHERE `sostoyanie` = 'Завершена' AND `adres` = `address`) AS `end`
  3. FROM `type_a`
  4. WHERE `sostoyanie` = 'Назначена'
  5. UNION
  6. SELECT `type_zayav`, `adres` AS `address`, `date`,
  7. (SELECT `date` FROM `type_b` WHERE `sostoyanie` = 'Завершена' AND `adres` = `address`) AS `end`
  8. FROM `type_b`
  9. WHERE `sostoyanie` = 'Назначена'

Спойлер (Отобразить)

(Отредактировано автором: 08 Июля, 2013 - 19:23:42)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
LIME
Отправлено: 08 Июля, 2013 - 19:43:56
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




AlexAnder используешь связанный запрос
подзапрос для end будет выполняться для каждого ряда в таблице
лучше использовать join
 
 Top
AlexAnder
Отправлено: 08 Июля, 2013 - 20:09:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




LIME
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT o.`type_zayav` AS `type`, o.`adres` AS `address`, o.`date` AS `start`, t.`date` AS `end`
  2. FROM `type_a` `o`, `type_a` `t`
  3. WHERE o.`sostoyanie` = 'Назначена' AND t.`sostoyanie` = 'Завершена' AND t.`adres` = o.`adres`
  4. UNION
  5. SELECT o.`type_zayav` AS `type`, o.`adres` AS `address`, o.`date` AS `start`, t.`date` AS `end`
  6. FROM `type_b` `o`, `type_b` `t`
  7. WHERE o.`sostoyanie` = 'Назначена' AND t.`sostoyanie` = 'Завершена' AND t.`adres` = o.`adres`

что-то не могу сообразить что бы и это выводило тоже:
Цитата:
ЗаявкаИТ 18 2013-07-02
ЗаявкаИТ 398 2013-07-04
ЗаявкаИТ 447 2013-07-02

тоесть строки\ряды\результат\... которые без даты завершения
(Добавление)
как только уже и не пробовал ...


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
LIME
Отправлено: 08 Июля, 2013 - 21:20:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT o.`type_zayav` AS `type`, o.`adres` AS `address`, o.`date` AS `start`, t.`date` AS `end`
  2. FROM `type_a` `o`
  3. LEFT JOIN `type_a` `t`
  4. ON t.`adres` = o.`adres` AND t.`sostoyanie` = 'Завершена'
  5. WHERE o.`sostoyanie` = 'Назначена'
если не найдется то будет null присобачен

(Отредактировано автором: 08 Июля, 2013 - 21:21:21)

 
 Top
AlexAnder
Отправлено: 08 Июля, 2013 - 21:29:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




Цитата:
TYPE ADDRESS START END
Внутр.Задача 43 July, 02 2013 00:00:00+0000 July, 04 2013 00:00:00+0000
Внутр.Задача 56 July, 02 2013 00:00:00+0000 July, 04 2013 00:00:00+0000
ЗаявкаИТ 18 July, 02 2013 00:00:00+0000 (null)
ЗаявкаИТ 398 July, 04 2013 00:00:00+0000 (null)
ЗаявкаИТ 447 July, 02 2013 00:00:00+0000 (null)
ЗаявкаИТ 474 July, 03 2013 00:00:00+0000 July, 04 2013 00:00:00+0000
ЗаявкаИТ 475 July, 03 2013 00:00:00+0000 July, 06 2013 00:00:00+0000

TC пишет:
Надо чтобы вывод был след образом:


ТипЗаявки Ссылка Назначено_дата Завершена_дата
Внутр.Задача 43 2013-07-02 2013-07-04
Внутр.Задача 56 2013-07-02 2013-07-04
ЗаявкаИТ 18 2013-07-02
ЗаявкаИТ 398 2013-07-04
ЗаявкаИТ 447 2013-07-02
ЗаявкаИТ 474 2013-07-03 2013-07-04
ЗаявкаИТ 475 2013-07-03 2013-07-06

вроде схожи

проблема была тут
CODE (SQL):
скопировать код в буфер обмена
  1. ON t.`adres` = o.`adres`
  2. WHERE o.`sostoyanie` = 'Назначена' AND t.`sostoyanie` = 'Завершена'

(Отредактировано автором: 08 Июля, 2013 - 21:38:04)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
LIME
Отправлено: 08 Июля, 2013 - 21:34:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




AlexAnder ты это показал как надо или как у тебя было...ато непонятно и странно если первое
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB