0

我正在建立一个汽车租赁系统,我有 2 张桌子,一张用于汽车,一张用于出租。我只希望表 1 中的所有内容都显示一次,而表 2 中的所有内容都显示在表 1 下。

假设我的表如下所示:

表格1

  • ID
  • 模型

表 2

  • id(同表1 id)
  • 租金开始
  • 租金停止
  • 租期开始
  • 租时停止`

我希望它在表格中显示如下:

  • Carid(t1) / car(t1) / model(t1)
  • 租开始(t2)-租停止(t2)/租时间开始(t2)-租时间停止(t2)

例子:

  • 1 / 宝马 / 320
  • 14.3.2013-14.3.2013 / 13:30-14:30
  • 15.3.2013-15.3.2013 / 8:00-13:00

  • 2 / 奥迪 / A4

  • 15.3.2013-15.3.2013 / 8:00-13:00

这就是我现在所拥有的:

 $sqlquery = 
  "SELECT * FROM table1 
   LEFT JOIN table2 ON table1.id=table2.id 
   GROUP BY table1.id";

(对不起我的格式)

4

3 回答 3

0

如果您希望所有汽车只列出一次并提供所有相应的汽车租赁,您应该使用某种循环。由于您没有提供您正在使用的数据库,我只能给您伪代码:

 $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”。避免混淆。

于 2013-03-14T12:22:12.687 回答
0

您需要先执行查询,如下所示:

$sqlquery = "SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id";

这将提供每个 id 所需的所有记录(多行)。然后,您需要使用语句(for、foreach 等)过滤 php 中的记录。

流程如下:

  1. 执行查询
  2. 然后foreach记录检查id,如果id不同于之前的id或者0则回显Carid(t1) / car(t1) / model(t1)
  3. 否则回显rentstart(t2)-rentstop(t2) / renttimestart(t2)-Renttimestop(t2)

希望你明白这一点。

于 2013-03-14T12:13:28.177 回答
0

如果您希望一切都在 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
于 2013-03-14T12:31:29.870 回答