Mysql关系和获取链接数据

时间:2011-08-05 23:53:13

标签: php mysql

我现在已经做了一段时间,通过一些PHP,首先让我们说有两个表:

Users
user_id name email

Images 
image_id user_id url

user_id和图片表中的user_id将与关系相关联。

现在我要做的是按用户ID选择用户,检查是否找到用户,如果是,则再对图像表进行查询,并检查num行并循环返回,是否有一个函数我可以使用,这将允许我只选择用户和链接到用户的所有图像,而无需进行联合查询。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

当你说“不做联合查询”时,我认为你的意思是“不做两次查询。”

事实上,你想要的可能是LEFT JOIN。这个想法是你从用户表中选择匹配某个ID的用户,并左键加入images表。如果用户不存在图像,则左连接将为您提供空值。如果使用普通连接,则images表中不存在匹配记录这一事实将导致不返回任何行。

以下是一个例子:

SELECT u.name, u.email, i.url
FROM Users u
LEFT JOIN Images i ON (i.user_id = u.user_id)
WHERE u.id = @SpecificUserID;

假设找到了用户ID并且该用户有一些图像,您将得到如下结果:

name    email    url
-----   -----    -----
John    j@a.com  abc.jpg
John    j@a.com  def.jpg
John    j@a.com  ghi.jpg

现在您可以看到,名称和电子邮件值不断重复。您会获得每行的唯一图片网址以及匹配的用户名和电子邮件。

如果您一次只选择一个用户,则循环处理很简单。在第一次迭代时读取所有三个值。在后续迭代中,只需读取url,将其添加到列表或数组中。

以下是有关联接的有用教程:Understanding JOINs in MySQL and Other Relational Databases

答案 1 :(得分:0)

这可以在一个查询中完成,而不是两个,通过使用内部联接来获取结果集。

    $sql = "SELECT u.user_nid, i.url
    FROM tbl_user u
    INNER JOIN i.user_nid = u.user_nid
    WHERE user_nid = ?"

使用此查询,您将收到用户图像列表,如果没有返回图像或用户不存在,则行返回为零。

答案 2 :(得分:0)

您必须使用联接来从单个查询中的多个表中检索数据。

foreign key关系强制执行约束。例如:如果没有表B中的记录,则无法在表A中插入记录到表A中。