[英]SQL join showing duplicates in left table
我正在建立一個汽車租賃系統,我有2張桌子,一張用於租車,另一張用於租車。 我只希望表1中的所有內容顯示一次,而表2中的所有內容都顯示在表1下。
假設我的表格如下所示:
我希望將其顯示在表格中:
例:
15.3.2013-15.3.2013 / 8:00-13:00
2 /奧迪/ A4
這就是我現在所擁有的:
$sqlquery =
"SELECT * FROM table1
LEFT JOIN table2 ON table1.id=table2.id
GROUP BY table1.id";
(對不起,我的格式)
您將需要首先執行查詢,如下所示:
$sqlquery = "SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id";
這將提供每個id需要的所有記錄(多行)。 然后,您需要使用一條語句(for,foreach等)來過濾php中的記錄。
流程如下:
Carid(t1) / car(t1) / model(t1)
rentstart(t2)-rentstop(t2) / renttimestart(t2)-Renttimestop(t2)
希望你能明白。
如果您只想列出所有汽車並提供所有相應的汽車租賃,則應使用某種循環。 由於您沒有提供正在使用的數據庫,因此我只能給您偽代碼:
$sqlquery = "SELECT * FROM table1";
*execute query*
while ($car = *fetch*) {
*print car data*
$sqlquery = "SELECT * FROM table2 where id = ?";
*execute inner query with parameter binding: $car["id"]*
while ($rent = *fetch*) {
*print rent data*
}
}
一般提示:在第二個表上使用主鍵,並將“ id”重命名為“ carid”。 避免混亂。
如果要在sql中完成所有操作,則可以創建存儲過程:
declare @Table1 table
(
Id int,
Car varchar(100),
Model varchar(100)
)
Insert into @Table1 values
Select ID,Car,model From Table1
Declare @Temp Table
(
FinalValue varchar(300)
)
Declare @id int
While ((Select Count(*) From @Table1)>0)
Begin
Set @id =(Select Top 1 id From @Table1)
Insert Into @Temp
Select cast(id as varchar(5))+'/'+car+'/'+model From @Table1 Where Id=@id
Insert @Temp Select rentstart+'-'+rentstop +'/'+ renttimestart+'-'+Renttimestop From Table2 Where Id=@id
Delete From @Table1 Where Id=@id
End
Select * From @Temp
輸出:
1/BMW /320
14.3.2013-14.3.2013/13:30-14:30
15.3.2013-15.3.2013/8:00-13:30
2/Audi/A4
15.3.2013-15.3.2013/8:00-13:30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.