Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询sql并获取外键的结果';s值(非id)_Php_Sql_Phpmyadmin - Fatal编程技术网

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:外键关系仍然可以包含空值