0

我想列出制作特定年份发行的特定艺术家的 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 服务器版本相对应的手册,以在第 1 行的 'JOIN SELECT * FROM cd, song WHERE artist = '' AND cd.title =''' 附近使用正确的语法

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

4

3 回答 3

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]';

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

在此处输入图像描述

表参考可以是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

于 2013-05-24T15:36:20.950 回答
0

我认为您需要对一般 SQL 和连接做一些阅读。

您需要的 SQL 将是

选择 * 从 制片人 内连接光盘 ON Producer.[name] = cd.[name]

在哪里 cd.artist = '$_POST[艺术家]' AND cd.title = '$_POST[title]'

我没有包含表“歌曲”,因为我看不到连接字段是什么。

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

于 2013-05-24T15:44:44.373 回答
-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之前的查询可能会很有趣

于 2014-06-18T17:13:37.253 回答