使用1个查询查询具有多个GET函数的多个表

时间:2011-08-15 20:04:36

标签: php mysql

我试图在我的mysql数据库中查询6个单独的表,结构如下;

item

itemitemid |项目|描述|品牌|日期|时间|路径|

actor

actoractorid |名字| actorthumb |生物|

brand

brandbrandid |品牌名称|描述|图片|

movie

moviemovieid |标题|类型|一年| moviethumb |简介|

user

userid |名字|姓氏|电子邮件|密码|

request

requestid | userid | itemid | brandid | movieid | actorid |内容| requestdate |

通过使用get命令单击指向style.php的页面的链接,我可以通过从连接表中提取请求及其中的信息来查看请求。例如,在requestid = 1的情况下,我可以看到请求中的电影,电影中的演员,他们穿着的服装项目及其品牌。通过使用以下4个查询;

Movie
$requestid = $_GET['requestid'];
$query = "SELECT * FROM movie, request WHERE movie.movieid = 
request.movieid and requestid = ".$requestid;

Actor
$requestid = $_GET['requestid'];
$query = "SELECT * FROM actor, request WHERE actor.actorid = 
request.actorid and requestid = ".$requestid;

Item
$requestid = $_GET['requestid'];
$query = "SELECT * FROM item, request WHERE item.itemid = 
request.itemid and requestid = ".$requestid;

Brand
$requestid = $_GET['requestid'];
$query = "SELECT * FROM brand, request WHERE brand.brandid = 
request.brandid and requestid = ".$requestid;

因此,我想将上面的4个查询组合成1个单一查询,以便我显示所有信息,包括查询用户和请求表以显示谁记录了请求,请指教?

2 个答案:

答案 0 :(得分:1)

SELECT * FROM request r
INNER JOIN  movie m ON m.movieid = r.requestid
INNER JOIN actor a ON a.actorid = r.requestid
INNER JOIN item i ON i.itemid = r.requestid
INNER JOIN brand b ON b.brand_id = r.requestid
WHERE r.requestid = {your request id}

当然,如果其中一个连接可能会失败(例如,没有品牌的电影),那么请使用左连接。

另外,所有主键都相同并不奇怪吗?如果情况确实如此,你永远不会从请求表中选择:

SELECT * FROM movie m
INNER JOIN actor a ON a.actorid = m.movieid
INNER JOIN item i ON i.itemid = m.movieid
INNER JOIN brand b ON b.brand_id = m.movieid
WHERE m.movieid = {your request id}

答案 1 :(得分:1)

首先:如果你没有在数据库输入上使用mysql_real_escape_string(),那么你会遇到很多麻烦。

第二:SELECT *不应该以这种方式使用...你可以获得重复的列名,这将使你的生活非常困难。它需要更多的前期时间,但请指定要返回的列。

第三:你可以加入所有这些,如果你想要获得很多列,以及许多具有重复数据的行:

$requestid = mysql_real_escape_string($_GET['requestid']);
$query = "select r.requestid, m.*, a.*, i.*, b.* FROM request r INNER JOIN movie m ON m.movieid = r.movieid INNER JOIN actor a ON a.actorid = r.actorid INNER JOIN item i ON i.itemid = r.itemid INNER JOIN brand b ON b.brandid = r.brandid WHERE r.requestid = $requestid";

如果其中一些行不能加入,你也可能想要使用LEFT OUTER JOIN。