你好我有两个表,在InnoDB引擎中有一个PK ----> FK关系----> MySQL& PHP
第一个表格'属性'与第二个
之间的关系是一个---->很多表'propertyimages'。第一个表中的每一行都是唯一的,但在第二个表中
第一个表的每一行在第二个表中都有很多行我怎样才能从
中选择唯一的行第一个表和第二个表中第一个表的所有信息都是我的查询:
SELECT DISTINCT properties.PropertyName,
properties.PropertyStatus,
propertyimages.PropertyImageID,
propertyimages.ImagePath
FROM properties
INNER JOIN propertyimages
ON properties.PropertyImageID=propertyimages.PropertyImageID
AND propertyimages.PropertyImageID=8;
它给出了结果:
PropertyName PropertyStatus Propertyid property Image Path Appartment For Lease 8 upload/hydrangeas.jpg Appartment For Lease 8 upload/jelsh.jpg Appartment For Lease 8 upload/penguins.jpg Appartment For Lease 8 upload/tulips.jpg
在此结果中, PropertyName 和 PropertyStatus 重复,但我想要
独特,因为它存储在第一个表格中 propertyName 和 PropertyStatus
属于第一个表。 Propertyid 和 PropertyImagepath 绑定到第二个表。
答案 0 :(得分:0)
遗憾的是,连接将为表2中的每个元素创建一条记录,并在第一个表中使用匹配的父元素(id 8)。
你可以在第一个表字段上使用GROUP BY id 8,但是你可能无法得到你想要的所有结果,因为它只会拍摄第一张图片。
你可以重构你的过程,这样当涉及到图像(和它们的显示)时,你可以运行一个查询来获得与属性8相关的每个图像
您总是可以使用嵌套查询(假设您希望在页面上显示属性等图像)
$query1 = mysql_query("SELECT Propertyid, PropertyName, PropertyStatus FROM properties WHERE (search criteria)");
if (mysql_num_rows($query1) > 0) {
while ($q1Row = mysql_fetch_array($query1)) {
// Insert property specific data here before you display the images
echo $q1Row['PropertyName']."<br>\n";
echo $q1Row['PropertyStatus']."<br>\n";
$query2 = "SELECT PropertyImageID, ImagePath FROM propertyimages WHERE PropertyImageID='".$q1Row['Propertyid']."'"
if (mysql_num_rows($query2) > 0) {
while ($q2Row = mysql_fetch_array($query2)) {
// add code here to do whatever you want with the images
echo '<image src="'.$q2Row['ImagePath'].'"><br>\n';
}
}
}
}
}
它也有助于了解你的数据库结构..我想你会想要这样的东西
table 1 (properties)
PropertyID (Primary Key)
PropertyName
PropertyStatus
table 2 (propertyImages)
ImageID (Primary Key)
PropertyID (many to one reference to PropertyID in table 1)
ImagePath
我可能对FK方法有点遗忘,所以如果我这里也有一个教训,我很想知道你有什么输入。
答案 1 :(得分:0)
你距离解决方案只有一步之遥,你只需要从第二个表中选择然后首先选择,这样你就可以得到所有你匹配的结果
SELECT DISTINCT properties.PropertyName,
properties.PropertyStatus,
propertyimages.PropertyImageID,
propertyimages.ImagePath
FROM propertyimages
INNER JOIN properties
ON propertyimages.PropertyImageID = properties.PropertyImageID
AND propertyimages.PropertyImageID=8;
答案 2 :(得分:0)
您可以使用GROUP_CONCAT实现此目的。但我也认为,最好进行两次查询。没错。
SELECT DISTINCT properties.PropertyName,
properties.PropertyStatus,
propertyimages.PropertyImageID,
GROUP_CONCAT(propertyimages.ImagePath)
FROM properties
INNER JOIN propertyimages
ON properties.PropertyImageID=propertyimages.PropertyImageID
AND propertyimages.PropertyImageID=8;
GROUP BY propertyimages.PropertyImageID