[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как реализовать?
ph03n1x
Реализую модуль для сдачи показаний расхода воды.
В определенный период можно сдать показания. Человек авторизовался под своим логином, передал показания, данные в БД, дальше с библиотекой phpexcel формирую отчеты и делаю чего хочу.
Но вопрос в том, что если человек забыл и не передал показания? Как занести нулевые данные в бд?
Valick
ph03n1x, а зачем их заносить в БД если их нет? просто при формировании отчета, проставляй нули если нет записи в БД


_____________
Стимулятор ~yoomoney - 41001303250491
ph03n1x
В этом и проблема, модуль реализую для joomla 2.5
в БД есть таблица tsj_water(данные по воде) в которую заносятся показания через форму и есть стандартная таблица users где хранятся пользователи джумлы
Делаю так
<?php
$query = "SELECT * FROM
#__tsj_water as wa,
#__users AS us
WHERE
us.id = wa.user_id
AND date>= '"
.$start_data."' AND date <= '".$stop_data."' ORDER BY wa.user_id";
$db->setQuery($query);
$waters = $db->loadObjectlist();
return $waters;
?>

Далее через foreach вывожу данные в таблицу.
Но так как я сортирую данные через us.id = wa.user_id, то все те, кто не передал показания попросту отбрасываются и в таблице их нет.
Valick
ph03n1x, так вся проблема в отсутсвии знаний SQL.
$query = "SELECT * FROM 
#__tsj_water as wa RIGHT JOIN
#__users AS us
ON us.id = wa.user_id
WHERE date>= '"
.$start_data."' AND date <= '".$stop_data."' ORDER BY wa.user_id";

можно даже для пущей важности IFNULL в селект добавить

_____________
Стимулятор ~yoomoney - 41001303250491
ph03n1x
Зря я пример упростил :(
Полный sql запрос выглядит так
<?php
$query = "SELECT * FROM
#__tsj_users AS a,
#__tsj_water_data AS wd,
#__tsj_water_schetchik AS ws,
#__users AS us
WHERE
us.id = a.user_id
AND
wd.count_id = ws.count_id
AND
a.account_id = ws.account_id
AND
wd.date>='"
.$start_data."' AND wd.date_in <='".$stop_data."'";
?>
tsj_users - таблица в которой полные контактные данные юзера
tsj_water_data - показания и дата
tsj_water_schetchik - полная информация о счетчиках
users - стандартная таблица джумлы с юзерами
Попробовал применить JOIN'ы, но не получается, потому как JOIN надо применить несколько раз к одной таблице, а это недопустимо, как решить?
Kusss
SELECT 
*
FROM
#__tsj_water_data AS wd
INTER JOIN
#__tsj_water_schetchik AS ws ON wd.count_id = ws.count_id
INTER JOIN
#__tsj_users AS a ON a.account_id = ws.account_id
INTER JOIN
#__users AS us ON us.id = a.user_id
WHERE
wd.`date`>='".$start_data."' AND wd.date_in <='".$stop_data."'"

Как-то так наверное
только вместо * может стоит перечислить что конкретно нужно ?
Valick
ph03n1x, не поймите меня превратно, но страшно подумать чего вы там накодили в модуле, если вы не можете составить запрос с соединением 4-х таблиц.
Я так полагаю, что изучение SQL не входит в ваши планы, поэтому скорее всего решение вашего вопроса будет платным.
__
Kusss, INTER JOIN ? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
Kusss
Valick
Упс .... INNER конечно.

Edit. Если нужно нули из таблицы `#__tsj_water_data` то нужно по другому.
ph03n1x
Именно это и нужно, в этом загвоздка sad.gif

Valick, входит, уже читаю smile.gif
Valick
ph03n1x, тогда показывайте свой запрос с джоинами, который у вас не получился

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.