2014-05-07 84 views
0

我甚至不確定如何正確地問這個問題,讓我忍受。在mysql中連接兩個表時丟失數據?

我有兩個表,滿足和位置,它們被滿足的「祿」和位置的「身份證」

我使用這個查詢鏈接:

$query = "SELECT * FROM meets LEFT JOIN locations ON locations.id=meets.loc ORDER BY date DESC"; 
$meets = mysqli_query($con, $query); 

雖然它加入表成功我失去了會議的'id',因爲它被該位置的'id'覆蓋。所以我最終得到了兩個相同的條目'id'和'loc'。

有沒有什麼辦法可以避免這種情況,因爲我需要致電會議ID?

回答

4

不選擇*,選擇你需要的列,並使用像這樣

SELECT locations.id as loc_id, meets.id as meets_id, ... FROM meets LEFT JOIN locations ON locations.id=meets.loc ORDER BY date DESC 

與其他列替換...as關鍵詞將其重命名你會喜歡選擇和可能的重命名。

+0

其實我在想是這樣的話,不幸的,因爲我需要選擇很多列,所以這將是一個長查詢。 – Muskogeee

+3

@Muskogeee在生產環境中,'SELECT *'幾乎總是不正確的。查詢分析器中的即席查詢很好,但不應該在任何地方以編程方式使用查詢。在這裏,您不僅要強制MySQL查找表列名稱,還要求它將這些表中的所有數據全部返回給您。如果稍後有人出現並在表格中添加二進制圖片字段,則即使您不需要它,查詢也會將圖像數據返回到結果集中的PHP。 –

0

你可以別名locations.id用類似的查詢:

SELECT meets.*, locations.id AS loc_id FROM meets LEFT JOIN locations ON locations.id=meets.loc ORDER BY date DESC 

你可以從locations,你可能還需要添加任何其他列。你可能會進一步僅從meet選擇明確的列,而不是meet.*

0

,你可以嘗試使用SELECT meets.*, locations.id as locationId, locations.<row> as location<Row>, ...

0

不知道,如果語法是完全一樣的,但在SQL Server中的語法是:

SELECT m.*, l.id as LocationId 
FROM meets m 
LEFT JOIN locations l 
ON l.id=m.loc 
ORDER BY date DESC