【问题标题】:querying multiple tables with multiple GET functions using 1 query使用 1 个查询查询具有多个 GET 函数的多个表
【发布时间】:2011-08-16 04:41:25
【问题描述】:

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

item

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

actor

演员演员 |姓名 |大拇指 |生物 |

brand

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

movie

moviemovieid |标题 |流派 |年份 |电影拇指 |剧情简介|

user

用户名 |姓名 |姓氏 |电子邮件 |密码 |

request

请求ID |用户名 |项目编号 |布兰迪|电影ID |演员 |内容 |请求日期 |

通过使用 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 个查询,这样我就可以显示所有信息,包括查询用户和请求表以显示谁记录了请求,请告知?

【问题讨论】:

标签: php mysql


【解决方案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}

【讨论】:

  • 这两个查询都无法运行;无法执行查询选择 r.requestid, m.*, a.*, i.*, b.* FROM request r INNER JOIN movie m ON m.movi​​eid = r.movi​​eid 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.brandidWHERE r.requestid = 57
  • 您是否将 {your request id} 替换为实际值?如果你不给我错误,我真的帮不上忙。另外,我不知道你的架构,所以我只是离开你提供的列名,但它至少会让你开始。
  • 不是变量 $requestid 的实际值,它使用 GET 函数获取请求 ID。所有表都使用单个表的 PK 链接到请求表。
【解决方案2】:

首先:如果您没有在数据库输入上使用 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。

【讨论】:

  • 您好感谢您的回复,但是此查询无法运行;无法执行查询选择 r.requestid, m.*, a.*, i.*, b.* FROM request r INNER JOIN movie m ON m.movi​​eid = r.movi​​eid 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.brandidWHERE r.requestid = 57
  • 看起来像是删除 WHERE 子句之前的换行符。在里面加个空格,看看有没有帮助。
  • 嗨 Jeremy 我已经纠正了这个问题,但是仍然是同样的错误 SELECT * FROM request rINNER JOIN movie m ON m.movi​​eid = r.requestidINNER JOIN actor a ON a.actorid = r.requestidINNER JOIN item i ON i.itemid = r.requestidINNER JOIN 品牌 b ON b.brand_id = r.requestid WHERE r.requestid = 61
  • 我仍然看到很多短语混在一起。我将更改我的答案以使其成为一条线,这应该会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多