我有两个表,标记和markerDetails。我想从markerDetails的行追加标记值的行,如果有标记,那么它就是标记详细信息。两者上的常见列是纬度和经度。我已尝试使用UNION
和LEFT JOIN
RIGHT JOIN
的许多不同版本。
这是我现在的查询,简单而且几乎可以运作:
$query = mysqli_query($link, "SELECT * FROM markers as m LEFT JOIN markerDetails as md
on m.latitude=md.latitude AND m.longitude=md.longitude WHERE m.whoAdded='$user'");
//tried, same result as above
mysqli_query($link, "SELECT * FROM markers as m LEFT JOIN markerDetails as md on
m.latitude=md.latitude AND m.longitude=md.longitude WHERE m.whoAdded='$user' UNION SELECT * FROM markers as m
RIGHT JOIN markerDetails as md on m.latitude=md.latitude AND m.longitude=md.longitude");
此查询出现问题,如果markerDetails中没有行,由于某种原因它会给我一个NULL id,NULL纬度和NULL经度。如果markerDetails中有一行,我会得到markerDetails行的id,而不是标记行......
理想情况下,我希望标记中的整行具有来自markerDetails的附加行,具有纬度和经度的一个实例......并且仍然使用WHERE m.whoAdded='$user'
。我在这里不了解JOIN查询的内容是什么?
markers STRUCTURE:
id latitude longitude whoAdded locationType locationName numChecks numImgs numRevs timeadded
markerDetails STRUCTURE:
id latitude longitude locAdd locHrs locPh locSt locApp locMsg locMn
所以期望的输出应该是:
id (of markers), latitude, longitude, whoAdded, locationType, locationName,
numChecks, numImgs, numRevs, locAdd, locHrs, locPh, locSt, locApp, locMsg, locMn
答案 0 :(得分:1)
尝试:
SELECT m.id,
m.latitude,
m.longitude,
m.whoAdded,
m.locationType,
m.locationName,
m.numChecks,
m.numImgs,
m.numRevs,
md.locAdd,
md.locHrs,
md.locPh,
md.locSt,
md.locApp,
md.locMsg,
md.locMn
FROM markers as m
LEFT JOIN markerDetails as md
on m.latitude = md.latitude
AND m.longitude = md.longitude
WHERE m.whoAdded = '$user'
答案 1 :(得分:0)
您需要对两个表进行INNER JOIN。
mysqli_query($link, "SELECT * FROM markers m, markerDetails md where
m.latitude=md.latitude AND m.longitude=md.longitude AND m.whoAdded='$user'");
此外,您可以在上面的选择查询中限制所需的列。