2009-08-27 64 views
1
$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>"; 
} 

此查询仅输出AGents表中的第一个代理,以及国家表和作业表...我想根据这些表中的条目输出相应的代理名称,国家名称和作业类型行项目表。查询仅在表中显示第一个条目 - 错误!

请帮忙!

+1

当您在PHP之外运行此查询时,是否会返回多行? – 2009-08-27 17:17:27

回答

1

尝试使用mysql_fetch_array代替:

while($row = mysql_fetch_array($result)) { 
    echo "Agent:" . $row['Agent_Name']."<br>"; 
    echo "Country:" . $row['Country_Name']."<br>"; 
    echo "Job:" . $row['Job_Type']."<br>"; 
} 
+0

没有工作,对不起! – Felix 2009-08-27 17:27:45

0

我认为问题在于它要尝试拉在你的SQL,你必须在一个单/简单的SELECT语句不访问值的事实。您应该使用JOIN语句来执行您正在尝试的操作 - 根据两个或多个表之间的公共列数据从一个或多个表中提取数据。在您的SQL快速尝试:

SELECT A.Agent_Name, C.Country_Name, J.Job_Type FROM Line_Items LI INNER JOIN 
(Agents A CROSS JOIN Country C CROSS JOIN Job J) ON 
(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); 

编辑:抱歉关于错过了 - 它确实需要它。我并不想为你获得一个完美的SQL语句 - 你知道你需要什么列和匹配什么:它只是一个粗略的草图。这是官方MySQL加入文档的link

+0

@罗伯特,OP是使用不同的加入语法,稍微陈旧的语法恕我直言,但直到有效。 – Rob 2009-08-27 17:24:26

+0

选择无FROM?这会工作......? – Felix 2009-08-27 23:14:42

+0

@Felix,好点 - 它不会! :) – Rob 2009-08-28 06:19:14

相关问题