我正在使用codeigniter为自己编写一个电影归档脚本。我从IMDb获取电影的信息并将它们添加到我的数据库中。我正在使用另一个名为链接的表格为我选择的电影添加链接。
这是我用来从数据库中获取电影的查询:
$movies = $this->db->query("SELECT *
FROM movies
ORDER BY ".$order['by']." ".$order['type']."
LIMIT ".$limit.", " . $this->config->item('moviePerPage')
);
我在这样的视图文件中获取它:
foreach ($movies->result() as $row) {
echo $row->name;
}
现在必须为每部具有匹配ID的电影显示链接(电影可以有多个链接)。我的链接表包含以下列:' id',' movieid',' name',' link'
如何通过单个MySQL查询获取每部电影的链接?是否可以获取与当前$ row影片相关的所有链接并将它们作为数组绑定到单个变量?有了这个,我可以用foreach()循环它,并显示每部电影的链接。
btw:movies.movieid和links.movieid列具有相同的数据。
答案 0 :(得分:3)
我认为你需要mysql' GROUP_CONCAT
做这样的事情: -
SELECT
movies.*,
group_concat(links.link ', ') as links
FROM movies
LEFT JOIN links
ON links.movieid = movies.movieid
GROUP BY movies.movieid
您将获得以逗号分隔的每部电影的链接列表。 您可以这样提取: -
foreach ($movies->result() as $row) {
$linksArray = explode(",",$row->links);
}
<强>更新强> 我认为这是获得结果的唯一方法,而不会为具有多个链接的单个影片提供多个结果行。
请注意结果中可以获得的最大字符长度 - 默认为1024个字符。读这个 Mysql group_concat_max_length和Group concat max length知道如何覆盖限制。
和Dan Grossman一样,如果你觉得链接可能包含逗号,请使用不同或不常见的分隔符。
答案 1 :(得分:0)
加入两个表,就像你的问题名称所暗示的一样。
SELECT
movies.*,
links.*
FROM movies
LEFT OUTER JOIN links
ON links.movieid = movies.movieid
...
每个电影链接对将获得一行。如果没有电影的链接,您将获得一行只包含电影信息和与链接表对应的列中的NULL。
如果您愿意,可以循环显示这些结果,并将每部电影的链接放入由电影键入的数组中。