Запрос из нескольких таблиц урезает результат. Помогите доделать.

Valentin

Новичок
Запрос из нескольких таблиц урезает результат. Помогите доделать.

Собственно, нужно из базы сделать выборку и составить таблицу из клиентов: 2 поля : id клиента + дата последнего звонка клиенту

Таблицы:
clients - клиенты
calls - звонки клиентам

Если звонок не совершался вообще, нужно вывести вместо даты "заглушку" типа "ещё не звонили" в поле "дата последнего звонка".

SELECT clients.clients_id, MAX(calls.date) as date FROM clients, calls WHERE (clients.clients_id = calls.clients_id AND calls.date) GROUP BY clients.clients_id ORDER BY company_name_original

А запрос выводит только тех клиентов для которых в таблице calls есть звонок.

Как вывести всех клиентов и дату звонка (с "заглушками") одним запросом?

Спасибо заранее.
 

Valentin

Новичок
Можно своими "доходчивыми словами" описать специфику этого оператора в формате данного запроса? Очень прошу :)
 

.des.

Поставил пиво кому надо ;-)
А запрос выводит только тех клиентов для которых в таблице calls есть звонок.
Вот это как раз и решает LEFT JOIN - выводит клиентов, даже если они не совершали звонков.
 

basboy

Новичок
Он вас не понимает вообще никак, потому, что не знает синтаксис.
Valentin
SELECT clients.clients_id, MAX(calls.date) as date FROM clients LEFT JOIN calls ON (clients.clients_id = calls.clients_id) WHERE calls.date OR calls.date is NULL GROUP BY clients.clients_id ORDER BY company_name_original


А в PHP програмно где NULL, заменяешь на "позвоните мне кто-нибудь"
 

Valentin

Новичок
Запрос с LEFT JOIN ... ON

Есть таблица пользователей users с полями users_id, name, ... , states_id

states_id могут быть = [0,1,2,3] - это состояния пользователей

Как одним запросом вывести результат - строку из 4-х столбцов: подсчёт состояний пользователей используя COUNT и WHERE states_id = '0' (1,2,3) ?

Результат типа:

'0' '1' '2' '3'
12 45 65 76

Это по одной и той же таблице нужно пройти 4 раза?

Пробовал LEFT JOIN, но результаты получил неправильные,
такого приблизительно плана.
'0' '1' '2' '3'
900 445 345 243

Просто нигде аналогичного примера не нашёл и что-то недопасал в запросе.
 

basboy

Новичок
Valentin
Для начала если тебе всё таки помогла подсказка с первым вопросом, то надо сказать спасибо.

Во сторых ты не понимаешь для цего нужен INNER JOIN, и чем он отличается от LEFT JOIN и RIGHT JOIN.

И я думаю никто не полнял. что тебе надо.

Ты хочешь, чтоб у тебя в одной строке содержалась инфа сразу из 4-х полей?
 

Valentin

Новичок
Во вторых: Да! из 4-х полей :)
Во первых: Читай первый вопрос, там в конце написано: "Спасибо заранее" :)
В третьих - я действительно не пока шарю в прелестях использования JOIN, т.к. начинаю только их изучать.
В четвёртых: Второй мой вопрос был отдельной темой, просто его сюда переместил модератор.

Заранее Спасибо :)
 

chira

Новичок
Valentin
ты хочешь сделать дополнительные расчёты для первого SQL?
не понятна логика ...
для:
Есть таблица пользователей users с полями users_id, name, ... , states_id

states_id могут быть = [0,1,2,3] - это состояния пользователей

Как одним запросом вывести результат - строку из 4-х столбцов: подсчёт состояний пользователей используя COUNT и WHERE states_id = '0' (1,2,3) ?
Код:
SELECT 
COUNT(if(state_id=0,1,NULL)) state0
,COUNT(if(state_id=1,1,NULL)) state1
,COUNT(if(state_id=2,1,NULL)) state2
,COUNT(if(state_id=3,1,NULL)) state3
FROM users
 

basboy

Новичок
Valentin

Нет смысла выводить в одну строку значения 4-х полей. Это нужно делать програмно.
 

Valentin

Новичок
С первым я уже разобрался, за что всем, кто учавствовал -Большое Пасиба :)

Второй SQL близко связан с первым, переделал немного структуру таблицы. Есть БД, которую я спроектировал. Теперь решаю все SQL-запросы которые в голову прийдут для дальнейшего использования, и которые мне интересны. Как видите, с некоторыми запросами возникают проблеммы.

Теперь это выглядит так
Код:
SELECT 
 COUNT(if(clients_states_id=0,1,NULL)) state0
,COUNT(if(clients_states_id=1,1,NULL)) state1
,COUNT(if(clients_states_id=2,1,NULL)) state2
,COUNT(if(clients_states_id=3,1,NULL)) state3
FROM clients
Спасибо!
 

.des.

Поставил пиво кому надо ;-)
А что мешает сделать:
Код:
SELECT clients_states_id, COUNT(*) AS st FROM clients GROUP BY clients_states_id
?
 
Сверху