PHP nasıl birden fazla MySQL tablo ve çıkışı seçerim?

2 Cevap php

Benim PHP uygulaması için MySQL en az 4 tablolar (Bu örnek için kısaltılmış) var

Agents - Agent_ID - Agent_Name

Country - Country_ID - Country_Name

Job - Job_ID - Job_Type

Line_Items - Line_ID - Agent_ID - Country_ID - Job_ID

Şimdi, agent_id = 1 line_items seçmeniz gerekir, ve eko-ing kendi tamsayılar agent_id, country_id ve job_id, yerine (AGENT_NAME, country_namede, Job_Type) çıkış isimlerini istiyorum yerine.

  1. Nasıl sorgu yazıyorsunuz?
  2. Bu nasıl iyi kullanılan $ sonuç kullanarak, PHP Ben çıktı do = mysql_query ("seçeneğini seçin ...."); while ($ row = mysql_fetch_query ($ result)) {echo .....};

2 Cevap

Sen join tablolar gerekir:

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

Ayrıca, bu yüzden gibi, bir view kullanmayı düşünebilirsiniz:

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

: Sonra, görünümünü kullanarak, sorgu kadar basittir

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

Bu sorguları herhangi sayesinde, size çıktı sonuçlarını yazdı PHP kodu kullanabilirsiniz.

Umarım yardımcı olur.


EDIT

Ilk sorguyu kullanarak, PHP gibi bir şey bu (basitleştirilmiş) olacaktır:

$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>";
}

Eğer farklı bir kimlik gerekiyorsa Tabii ki, LI.Agent_ID değiştirmeniz gerekir. Sadece bunun için bir yer tutucu kullanmak ve doğru kimliği için değiştirin, ya sorguya doğru kimliğini arada kullanabilirsiniz.

Sadece burada JG ile gidiyor, bir birleşim kullanın. Ama burada bir alternatif (ve daha kabul?) Tabloları birleştirme için sözdizimi.

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

Sen ülke, ajan, ya da iş satırlar da yok eğer iç birleşim yerine, bir LEFT JOIN kullanabilirsiniz. Örneğin, hiçbir ülke varsa ben yaptım gibi bir INNER JOIN kullanarak hiçbir satır döndürülür neden olacaktır.