Как выбрать из нескольких таблиц mySQL и вывести на PHP? - PullRequest
0 голосов
/ 22 августа 2009

У меня есть как минимум 4 таблицы в MySQL для моего приложения PHP (сокращено для этого примера)

Агенты - Agent_ID - Agent_Name

Страна - Country_ID - Country_Name

Работа - Job_ID - Job_Type

Line_Items - Line_ID - Agent_ID - Country_ID - Job_ID

Теперь мне нужно выбрать из Line_Items, где Agent_ID = 1, и вместо того, чтобы отображать Agent_ID, Country_ID и Job_ID в их целых числах, я бы хотел вывести их имена вместо (Agent_Name, Country_Name, Job_Type).

  1. Как мне написать запрос?
  2. Как вывести это в PHP, используя хорошо используемый $ result = mysql_query ("select ...."); while ($ row = mysql_fetch_query ($ result)) {echo .....};

Ответы [ 2 ]

2 голосов
/ 22 августа 2009

Вам необходимо присоединиться к таблицам:

SELECT A.Agent_Name, C.Country_Name, J.Job_Type
FROM Line_Items LI, Agents A, Country C, Job J
WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND
      LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID

Также рассмотрите возможность использования view , например:

CREATE VIEW Line_Items_Detail
AS
  SELECT LI.Agent_ID, A.Agent_Name, C.Country_Name, J.Job_Type
  FROM Line_Items LI, Agents A, Country C, Job J
  WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND
        LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID

Тогда, используя представление, ваш запрос так же прост:

SELECT Agent_Name, Country_Name, Job_Type
FROM Line_Items_Detail
WHERE Agent_ID = 1

С любым из этих запросов вы можете использовать PHP-код, который вы написали, для вывода результатов.

Надеюсь, это поможет.


EDIT

Используя первый запрос, ваш PHP будет выглядеть примерно так (упрощенно):

$query = "SELECT A.Agent_Name, C.Country_Name, J.Job_Type FROM Line_Items LI, Agents A, Country C, Job J WHERE LI.Agent_ID = 1 AND LI.Agent_ID = A.Agent_ID AND LI.Country_ID = C.Country_ID AND LI.Job_ID = J.Job_ID";
$result = mysql_query($query);
while($row = mysql_fetch_query($result)) {
    echo "Agent:" . $row['Agent_Name']."<br>";
    echo "Country:" . $row['Country_Name']."<br>";
    echo "Job:" . $row['Job_Type']."<br>";
}

Конечно, вам нужно изменить LI.Agent_ID, если вам нужен другой идентификатор. Вы можете просто использовать для него заполнитель и заменить его на правильный идентификатор или объединить правильный идентификатор с запросом.

0 голосов
/ 22 августа 2009

Просто перейдите к JG, используйте соединение. Но вот альтернативный (и более приемлемый) синтаксис для объединения таблиц.

SELECT A.Agent_Name, C.Country_Name, J.Job_Type
FROM Line_Items LI
INNER JOIN  Agents A
ON LI.Agent_ID = A.Agent_ID
INNER JOIN Country C
LI.Country_ID = C.Country_ID
INNER JOIN Job J
ON LI.Job_ID = J.Job_ID
WHERE LI.Agent_ID = 1

Вы можете использовать ЛЕВОЕ СОЕДИНЕНИЕ вместо внутреннего объединения, если строки страны, агента или задания могут не существовать. Использование INNER JOIN, как я уже сделал, не приведет к возвращению строк, если, например, нет страны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...