我现在已经做了一段时间,通过一些PHP,首先让我们说有两个表:
Users
user_id name email
Images
image_id user_id url
user_id
和图片表中的user_id
将与关系相关联。
现在我要做的是按用户ID选择用户,检查是否找到用户,如果是,则再对图像表进行查询,并检查num行并循环返回,是否有一个函数我可以使用,这将允许我只选择用户和链接到用户的所有图像,而无需进行联合查询。
感谢您的帮助
答案 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中。