Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LEFT JOIN, выбрать даже тезаписи, которых нет в дру 
:(
    Опции темы
lumentek
Дата 21.4.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



Есть запрос
Код

SELECT
    count(*)
FROM
    lab_analyses
LEFT JOIN
    lpu ON lpu.lpu_id = lab_analyses.lpu_id
WHERE
    lab_analyses.`data` BETWEEN '2010-01-01' AND '2010-04-31'
    AND lab_analyses.`id_type_research` = 15
GROUP BY
    lpu.lpu_id 
ORDER BY 
    lpu.name_lpu 


Таблица lpu - Это справочник. Так вот у меня 1 вопрос.

1. Запрос подсчитывает общее количество проведеных анализов  у для каждого лпу, но только те ЛПУ которые, id которых есть в таблице анализов. А мне нужно выводить все ЛПУ из таблицы lpu, и там где нет соответсвие просто писалось NULL. Помогите исправить запрос
PM MAIL   Вверх
DimW
Дата 21.4.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(lumentek @  21.4.2010,  12:56 Найти цитируемый пост)
А мне нужно выводить все ЛПУ из таблицы lpu, и там где нет соответсвие просто писалось NULL. Помогите исправить запрос 


так?
Код

SELECT
    lpu.name_lpu,
    lab_analyses.lpu_id
FROM
    lab_analyses
LEFT JOIN
    lpu ON lpu.lpu_id = lab_analyses.lpu_id
WHERE
    lab_analyses.`data` BETWEEN '2010-01-01' AND '2010-04-31'
    AND lab_analyses.`id_type_research` = 15
ORDER BY 
    lpu.name_lpu 

PM MAIL ICQ   Вверх
azesmcar
Дата 21.4.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(lumentek @  21.4.2010,  12:56 Найти цитируемый пост)
1. Запрос подсчитывает общее количество проведеных анализов  у для каждого лпу, но только те ЛПУ которые, id которых есть в таблице анализов. А мне нужно выводить все ЛПУ из таблицы lpu, и там где нет соответсвие просто писалось NULL

OUTER JOIN?
PM   Вверх
DimW
Дата 21.4.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



натупил - отношения местами поменять нужно:

Код

FROM
    lpu
LEFT JOIN
    lab_analyses ON lpu.lpu_id = lab_analyses.lpu_id



azesmcar, LEFT JOIN и так OUTER по умолчанию.

PM MAIL ICQ   Вверх
azesmcar
Дата 21.4.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



DimW

Ага, код запроса не посмотрел, по тексту вопроса показалось что автору это нужно. smile 

PM   Вверх
lumentek
Дата 21.4.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



Сделал так как вы сказали
Код

SELECT
 lpu.name_lpu,lab_analyses.data, lab_analyses.lpu_id
FROM
 lpu
 LEFT JOIN
 lab_analyses ON lpu.lpu_id  = lab_analyses.lpu_id 
WHERE
    lab_analyses.`data` BETWEEN '2010-01-01' AND '2010-04-31'
    AND lab_analyses.`id_type_research` = 15
GROUP BY
    lpu.lpu_id 
 ORDER BY 
 lpu.name_lpu 


все равно пустых значений нет(((( Что же может быть.  В таблице lpu 80 записей, а запрос выводит 43. По идее должно быть еще 37 пустых (NULL) значений((
            
            
PM MAIL   Вверх
lumentek
Дата 21.4.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



странно получается. если убираю where условие вообще, то все норм пашет. С чего бы это?
PM MAIL   Вверх
DimW
Дата 21.4.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(lumentek @  21.4.2010,  13:41 Найти цитируемый пост)
Сделал так как вы сказали

нет не так - убери GROUP BY.
PM MAIL ICQ   Вверх
lumentek
Дата 21.4.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



о все разобрался
PM MAIL   Вверх
DimW
Дата 21.4.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(lumentek @  21.4.2010,  13:41 Найти цитируемый пост)
 В таблице lpu 80 записей

сколько записей в таблице lab_analyses?

Добавлено через 32 секунды
Цитата(lumentek @  21.4.2010,  14:09 Найти цитируемый пост)
о все разобрался 

так вчем затык был?

Добавлено через 1 минуту и 27 секунд
Цитата(lumentek @  21.4.2010,  14:06 Найти цитируемый пост)
если убираю where условие вообще, то все норм

все понял.
PM MAIL ICQ   Вверх
lumentek
Дата 21.4.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



вот правильный запрос (спасибо Вам всем огромное)
Код

SELECT
 lpu.name_lpu,lab_analyses.data, lab_analyses.lpu_id
FROM
 lpu
LEFT JOIN
    lab_analyses ON lpu.lpu_id  = lab_analyses.lpu_id 
    AND lab_analyses.`data` BETWEEN '2010-01-01' AND '2010-04-31'
    AND lab_analyses.`id_type_research` = 15
GROUP BY
    lpu.lpu_id,
    lab_analyses.`data` 
 ORDER BY 
 lpu.name_lpu 
            
            


Тут я даже сразу группирую  и по ЛПУ и по дате.

Теперь мне нужна помощь от вас  вот в чем.

Как мне в каждую строчку вывести  ЛПУ с разбивкой по дате.
Тоесть вот так, например :

1 поликлиника: 1,2,3,4,5....31
2 поликлиника : 1,2,3....30 и.т.д
и.т.д.

Тоесть тут уже чистый php в помощь нужен. Какие есть предложение?

Добавлено через 1 минуту и 36 секунд
Цитата(DimW @ 21.4.2010,  14:09)
Цитата(lumentek @  21.4.2010,  13:41 Найти цитируемый пост)
 В таблице lpu 80 записей

сколько записей в таблице lab_analyses?



Добавлено @ 14:10
Цитата(lumentek @  21.4.2010,  14:06 Найти цитируемый пост)
если убираю where условие вообще, то все норм

все понял.

Добавлено @ 14:09
Цитата(lumentek @  21.4.2010,  14:09 Найти цитируемый пост)
о все разобрался 

так вчем затык был?

Затык был в том,  что я where не нужно было, а точнее оно должно было быть в JOIN констуркции
PM MAIL   Вверх
DimW
Дата 21.4.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(lumentek @  21.4.2010,  14:15 Найти цитируемый пост)
Тут я даже сразу группирую  и по ЛПУ и по дате.

какой смысл группировки без агрегации?

Цитата(lumentek @  21.4.2010,  14:15 Найти цитируемый пост)
Тоесть тут уже чистый php в помощь нужен. Какие есть предложение?

если хотите использовать пхп, то в соответствующую ветку обратитесь, а лучше доку откройте - в цикле по резалтсет нет ничего сложного.
PM MAIL ICQ   Вверх
lumentek
Дата 21.4.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



Цитата

Цитата(lumentek @  21.4.2010,  14:15 Найти цитируемый пост)
Тут я даже сразу группирую  и по ЛПУ и по дате.

какой смысл группировки без агрегации?


агрегация есть, я просто тут ее не указал

PM MAIL   Вверх
lumentek
Дата 21.4.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 19.11.2009

Репутация: нет
Всего: нет



только что обратил внимаения что в данном запросе не совпадает диапазон дат. тоесть дата выходит за рамки диапазона between. В чем опять мой косяк? тип данных date
PM MAIL   Вверх
DimW
Дата 22.4.2010, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(lumentek @  21.4.2010,  18:46 Найти цитируемый пост)
в данном запросе


Цитата(lumentek @  21.4.2010,  14:59 Найти цитируемый пост)
я просто тут ее не указал


в каком?


Цитата(lumentek @  21.4.2010,  18:46 Найти цитируемый пост)
тоесть дата выходит за рамки диапазона between

пример приведи как она выходит. 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.