如何加入多个查询

时间:2013-05-24 15:33:37

标签: php mysql sql mysqli

我想列出制作特定艺术家CD的制作人信息。

我的尝试:

$sql="SELECT * FROM producer, cd WHERE name = name and year= year JOIN SELECT * FROM cd, song WHERE  artist = '$_POST[artist]' AND cd.title ='$_POST[title]'"; 
$data=mysqli_query($sql); 
while ( $row = mysqli_fetch_array($data)) {
print_r($row); 

这是我得到的错误:

  

错误:您的SQL语法出错;检查对应的手册    到你的MySQL服务器版本,以便在附近使用正确的语法   'JOIN SELECT * FROM cd,song WHERE artist =''AND cd.title ='''at line 1

我如何错误地加入这两个查询?

3 个答案:

答案 0 :(得分:4)

请改为尝试:

SELECT * 
FROM producer AS p 
INNER JOIN cd        ON cd.name  = p.name AND cd.year= p.year 
INNER JOIN song AS s ON cd.title = s.title
WHERE s.artist = '$_POST[artist]' 
  AND cd.title ='$_POST[title]';

您应该将所有引用的表放在FROM子句后面JOIN 1

enter image description here

表引用可以是 2

enter image description here

要放置SELECT或子查询而不是表格,如下所示:

SELECT * 
FROM producer AS p 
INNER JOIN 
(
    -- here is another select
) AS analias ON -- jon conditino
WHERE ...

1,2:图像来自:SQL Queries for Mere Mortals(R): A Hands-On Guide to Data Manipulation in SQL

答案 1 :(得分:0)

我认为您需要对常规SQL和连接进行一些阅读。

您需要的SQL

SELECT * FROM Producer INNER JOIN cd ON Producer.[name] = cd.[name]

WHERE cd.artist = '$_POST[artist]' AND cd.title = '$_POST[title]'

我没有收录表'歌',因为我看不到连接字段会是什么。

我不知道发布的字符串的替换代码是否正确:我不熟悉PHP。我强烈建议您声明一些变量,从$ _Post填充它们,然后将它们传递给SQL字符串并稍加“清理”,因为您的代码看起来像是对SQL注入攻击的邀请。

答案 2 :(得分:-1)

为什么不呢?

SELECT * FROM producer as p, cd, song 
WHERE cd.name=p.name AND cd.year= p.year AND 
      cd.title=song.title AND cd.artist = '$_POST[artist]' AND 
      cd.title = '$_POST[title];

在查询可能有趣之前查看$_POST