Как выбрать поля из базы данных, если у вас нет нужной переменной? - PullRequest
1 голос
/ 18 августа 2011

Я задавал подобный вопрос раньше, но удалил его, потому что не мог объяснить это правильно.Это заявляет это прекрасно.

У меня есть 4 таблицы:

  1. Клиенты
  2. Агенты
  3. Client_agent_aprovals
  4. Подписки

-

Clients table has:  id, client_id, client_name
Agents table has: id, agent_id, agent_name
Client_agent_approvals has:  id, client_id, agent_id
subscriptions has: id, sales_id, client_id, agent_id

Теперь, как я могу структурировать этот запрос так, чтобы я мог позволить моим торговым агентам видеть, какие другие продукты их клиенты приобрели у других агентов.Я считаю, что правильным шагом было бы включить таблицу client_agent_approvals, поскольку она будет содержать список их client_ids и того, кто еще является для них агентом.

Как я могу это сделать?

ОБНОВЛЕНИЕ:

После получения некоторых ответов я попробовал это:

       $sql="SELECT s*
            FROM Client_agent_approvals caa
           INNER JOIN Subscriptions s ON s.client_id = caa.client_id
           WHERE caa.agent_id = '$id'
           AND s.agent_id <> '$id'";  
           $result=mysql_query($sql);

          $query = mysql_query($sql) or die ("Error: ".mysql_error());

         if ($result == "")
         {
      echo "";
      }
       echo "";


        $rows = mysql_num_rows($result);

       if($rows == 0)
        {
        print("");

          }
         elseif($rows > 0)
          {
        while($row = mysql_fetch_array($query))
         {

        $product = $row['product'];

         print("Products they have are: $product");
         }

         }

Все, что я вижу, это "Продукты, которые они имеют:"

Что такоене так ли сейчас?

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Предполагается, что вы ищете подписки:

Если вы знаете клиента и агента:

SELECT *
FROM SUBSCRIPTIONS
WHERE CLIENT_ID = @THE_CLIENT_ID -- My client
    AND AGENT_ID <> @THE_AGENT_ID -- But not my subscriptions

Если вы знаете только агента и хотите всех клиентов:

SELECT *
FROM SUBSCRIPTIONS
WHERE AGENT_ID <> @THE_AGENT_ID -- Not my subscriptions
    AND CLIENT_ID IN (
        SELECT CLIENT_ID FROM SUBSCRIPTIONS WHERE AGENT_ID = @THE_AGENT_ID
    ) -- all my clients

Затем присоединяйтесь, чтобы получить имена.

Давайте сначала запустим его вне PHP. Что вы получаете, когда запускаете это из командной строки mysql ?:

SELECT s.*
FROM Client_agent_approvals caa
INNER JOIN Subscriptions s
    ON s.client_id = caa.client_id
WHERE caa.agent_id = SOME_ID -- Note no quotes should be around an INT
    AND s.agent_id <> SOME_ID -- Note no quotes should be around an INT

Если это не работает, выведите данные здесь, чтобы мы могли увидеть данные и ожидаемые результаты.

1 голос
/ 19 августа 2011

Все, что вам нужно, это все продажи клиентов вашего агента, верно?

-- assuming you've set @myagent to the agent_id you are looking for
SELECT s.*
FROM Client_agent_approvals caa
    INNER JOIN Subscriptions s ON s.client_id = caa.client_id
WHERE caa.agent_id = @myagent
    AND s.agent_id <> @myagent -- if you want to exclude agent's own sales
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...