Php 查询sql并获取外键的结果';s值(非id)
Php 查询sql并获取外键的结果';s值(非id),php,sql,phpmyadmin,Php,Sql,Phpmyadmin,表格图像: 列-imageID、Image和categoryID*(这是外键) 表格类别: 列类别ID,类别 和表格查询,例如: $sql = "SELECT categoryID FROM IMAGES WHERE image = 'exampleImage'"; 我将得到一个类别ID的整数,即1 我的问题是显示ID所属类别的查询是什么?或任何关于如何处理多个查询的建议。使用简单的左连接: SELECT imageID, Image, IMAGE.categoryID, CATEG
表格图像
:
列-imageID、Image和categoryID*(这是外键)
表格类别
:
列类别ID,类别
$sql = "SELECT categoryID FROM IMAGES WHERE image = 'exampleImage'";
我将得到一个类别ID的整数,即1
我的问题是显示ID所属类别的查询是什么?或任何关于如何处理多个查询的建议。使用简单的左连接:
SELECT imageID, Image, IMAGE.categoryID, CATEGORIES.Category
FROM IMAGES
LEFT JOIN CATEGORIES
ON IMAGES.categoryID = CATEGORIES.categoryID
WHERE image = 'exampleImage'
使用表别名缩短语句:
SELECT imageID, Image, i.categoryID, c.Category
FROM IMAGES i
LEFT JOIN CATEGORIES c
ON i.categoryID = c.categoryID
WHERE image = 'exampleImage'
您希望使用内部联接,以便它返回基于联接条件匹配的记录
SELECT Images.CategoryID, Category.Category
FROM IMAGES
INNER JOIN Category ON Category.CategoryID = Images.CategoryID
WHERE image = exampleimage
@虽然左键连接会起作用,但如果可以的话,确实应该避免。它们比内部连接昂贵得多。在这个问题中,op提到他与category表有一个外键关系,这意味着总是有一个匹配的值。所以他真的应该使用内部连接,而不是左连接。只有在没有匹配值的情况下,他才想使用左键,但仍然想查看图像结果。@knittl非常感谢您的建议:)@spinon:他仍然可以使用空值的类别–使用内部联接时,结果中将忽略这些行。这取决于模式、期望的结果等。@knittl我的意思是,由于图像和类别之间存在外键关系,因此图像表中不应该存在类别id与类别表不匹配的记录。在这种情况下,您不会使用左连接,因为这是一个非常昂贵的过程,并且没有必要,因为它们总是匹配的。如果图像表中的id可能不在类别表中(即,可能是一个包含与图像匹配的所有类别的链接表),那么您将使用左连接,因为可能没有匹配。@spinon:外键关系仍然可以包含空值