我想列出制作特定艺术家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
我如何错误地加入这两个查询?
答案 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 :
表引用可以是 2 :
要放置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