我试图在我的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个单一查询,以便我显示所有信息,包括查询用户和请求表以显示谁记录了请求,请指教?
答案 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。