2016-01-13 1 views
2

У меня есть этот SQL запрос, где я составить список людей, которые заплатили в этом месяце, и кто не сделал:Изменение сложный INNER JOIN запрос и отображение его с PHP

SELECT main.* 
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now , 
        CASE MONTH(t2.date_now) 
         WHEN MONTH(CURDATE()) THEN 'Paid' 
         ELSE 'Not Paid' 
        END current_month 
     FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id 
     GROUP BY t2.client_id) main 
WHERE main.total_debts<> main.payments; 

Так что я получил это результат:

enter image description here

Как мы видим на картинке, у меня есть один и тот же клиент, платит за один пункт в этом месяце, но он не платит за другой пункт, так что практически, он пришел к моему магазину и дал мне деньги, поэтому мне нужно удалить его имя из списка как Not Paid и сохраните строку, где он сказал Paid.

И как я могу запустить этот запрос в PHP, чтобы я мог поместить его в таблицу для отображения. I tried the answer here in this link

$sql = "SELECT main.* 
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now , 
        CASE MONTH(t2.date_now) 
         WHEN MONTH(CURDATE()) THEN 'Paid' 
         ELSE 'Not Paid' 
        END current_month 
     FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id 
     GROUP BY t2.client_id) main 
WHERE main.total_debts<> main.payments;"; 
    $stmt = $conn->prepare($sql); 
    $exec = $stmt->execute(); 
    $res = $stmt->fetchAll(); 

Тогда HTML:

<div class="col-lg-6"> 
     <table> 
     <?php foreach($res as $row){ ?> 
     <tr> 
     <td><?php echo $row['t1.client_name']; ?></td> 
     </tr> 
     <?php } ?> 
     </table> 
     </div> 

Но он продолжает говорить мне:

Примечание: Undefined индекс: идентификатор в C: \ WAMP \ WWW ...

+1

Так что в этом случае, что должно быть в столбце «оплата» для этого пользователя. '50'? – Utsav

+0

нет, просто показывая строку, где он фактически заплатил –

+0

Почему у этого клиента есть два разных клиента? И что это за поле total_debts? – VolkerK

ответ

0

Ваша проблема SQL может быть обработана путем добавления состояния and в where в конце. Предполагается, что все строки имеют право на такую ​​продолжительность платежа. Если данные передаются через несколько месяцев, нам нужен другой запрос.

SELECT main.* 
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now , 
        CASE MONTH(t2.date_now) 
         WHEN MONTH(CURDATE()) THEN 'Paid' 
         ELSE 'Not Paid' 
        END current_month 
     FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id 
     GROUP BY t2.client_id 
     ) main 
WHERE main.total_debts<> main.payments 
and current_month='Not Paid' 
and client_name not in 
(select client_name from main 
where current_month='Paid' 
); 
+0

Ну, это работает, но когда я меняю его, чтобы показать мне список тех, t Заплачено заменой 'и main.current_month <> 'Не оплачено',' to 'и main.current_month <> 'Paid';' клиент علي указан, практически, он не должен, потому что он фактически заплатил за другой элемент в начале этого месяца, и проблема PHP решена. –

+0

замените условие на и main.current_month = 'Paid', и он будет работать – Utsav

+0

Сэр, я хочу, чтобы пользователь заплатил за товар и не заплатил за другой, в этом месяце, чтобы показать только его имя, в списке «Платный», а в списке «Не заплатить» должны быть включены только те, кто не платил в этом месяце ни для одного из пунктов. –