2015-03-21 3 views
1

Я делаю панель, где я могу управлять своими пользователями, я хочу показать имя пользователя, адрес электронной почты, и я хочу показать, сколько заказов размещено. В моей базе данных у меня есть 2 таблицы 1 пользователь, 1 заказ. Я сохраняю имя пользователя от пользователя в таблице заказов, поэтому я знаю, что пользователь купил его.MySQL Какой запрос я должен использовать

Но я хочу написать панель с обзором моих пользователей в цикле foreach. У меня есть цикл для имени пользователя, электронной почты, как я могу добавить к нему сумму заказа.

<?php 
$model = $connection->createCommand('SELECT * FROM user'); 
$adminAccounts = $model->queryAll(); 
foreach($adminAccounts as $results){ 
     $accounts['id'] = $account_id; 
     $accounts['username'] = $results['username']; 
     $accounts['email'] = $results['email']; 
     $accounts['rest'] = $results; 
    echo " 
     <tr> 
      <td> 
       <p>" . $newValidation->safeEcho($accounts['username']) ." </p> 
      </td> 
      <td> 
       <p>" . $newValidation->safeEcho($accounts['email'])." </p> 
      </td> 
     </tr> 
    "; 
} 

Допустим, мой стол взгляд любит это

<username> <email> 

Теперь я хочу, чтобы это выглядело как этот

<username> <email> <total orders> 

я думал я должен использовать внутреннее соединение, но как я могу сделать что ?

Greetz

ответ

1

Я думаю, что вы можете изменить свой запрос:

SELECT user.*, t.cnt FROM user JOIN (SELECT gebruikersnaam, COUNT(*) AS cnt FROM orders GROUP BY gebruikersnaam) t ON user.username = t.gebruikersnaam 

С помощью этого запроса вы можете получить пользователей заказы, но вы будете пропускать пользователей, без заказов, поэтому, чтобы получить их, вы можете сделать LEFT JOIN :

SELECT user.*, t.cnt FROM user LEFT JOIN (SELECT gebruikersnaam, COUNT(*) AS cnt FROM orders GROUP BY gebruikersnaam) t ON user.username = t.gebruikersnaam 

Я предположил, что поле для пользователей в табличных заказах - это имя пользователя. И в своем вопросе вы указываете, что таблица - это пользователи, но в вашей таблице запросов пользователь. Я использую пользователя. Если вы измените текущий запрос с этим вы можете добавить в свой код:

foreach($adminAccounts as $results){ 
    $accounts['id'] = $account_id; 
    $accounts['username'] = $results['username']; 
    $accounts['email'] = $results['email']; 
    $accounts['total_orders'] = ($results['cnt'] == NULL) ? 0 : $results['cnt']; // orders per user 
    $accounts['rest'] = $results; 
    echo " 
     <tr> 
      <td> 
       <p>" . $newValidation->safeEcho($accounts['username']) ." </p> 
      </td> 
      <td> 
       <p>" . $newValidation->safeEcho($accounts['email'])." </p> 
      </td> 
      <td> 
       <p>" . $newValidation->safeEcho($accounts['total_orders'])." </p> 
      </td> 

     </tr> 
    "; 
} 
+0

Я просто вижу, что пизда используется INSTAND имя пользователя в его таблице заказа, он использовал gebruikersnaam его нидерландский для пользователя, я не очень хорошо при составлении заявлений о присоединении, так что мне нужно переходить на гебрюйкершнаам? ». В пользовательской таблице, имени пользователя и в таблице заказа gebruikersnaam. – AddcitedToLearn

+0

См. Отредактированный ответ. – taliezin

+0

Да, я вижу, что запрос в порядке, по крайней мере, ошибок нет. Только я получаю Undefined index: cnt – AddcitedToLearn