我有这两个查询:
$sql = "SELECT *
FROM ultrait_wpl_properties
LEFT JOIN ultrait_wpl_property_types
ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
ORDER BY ultrait_wpl_properties.id ";
$sql2 = "SELECT *
FROM ultrait_wpl_properties, ultrait_wpl_property_types
WHERE ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id
ORDER BY ultrait_wpl_properties.id";
由于某些奇怪的原因,当输出ID时,有些是重复的吗?通过我的重新发布,这些查询应该从第一部分的表中获取所有内容,并根据WHERE条件连接第二个表。
<property><id>13</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>6</id></property>
<property><id>7</id></property>
这可能有点不清楚,但由于某些原因我得到重复的ID,我真正想要的是能够访问链接到第二个表中的ID的属性类型。
我已经在phpMyAdmin中测试了两个查询,并且他们提供了所需的结果,但是当我在我的php脚本中使用查询时,它们会返回意外的结果。
答案 0 :(得分:0)
如果ultrait_wpl_property_types表具有单个属性的多个记录,则会收到笛卡尔结果。例如属性类型可以是类型A,类型B,类型C,其可以是描述性“类型”。因此,每个条目都会考虑一个属性。
您可能只需要执行SELECT DISTINCT或GROUP BY ultrait_wpl_properties.id以确保每个ID只有一条记录,但是使用通用的“Select *”,我会先尝试使用GROUP BY。
答案 1 :(得分:0)
表ultrait_wpl_properties中的每一行都有一行。您还有什么期望?如果每种类型只有一条记录,那么您必须相应地重新编写查询。您从两个表中选择*。但它只是你需要的类型ID吗?那么为什么要加入这些表呢?
获取所有类型ID:
select id from ultrait_wpl_property_types;
获取表ultrait_wpl_properties中的所有类型ID:
select distinct property_type from ultrait_wpl_properties;
获取ultrait_wpl_properties中类型的所有类型数据:
select * from ultrait_wpl_property_types
where id in (select property_type from ultrait_wpl_properties);