php mysql选择列并与不同表中的3个值进行比较

时间:2014-03-13 00:11:48

标签: php mysql sql

我有4个mysql表,其中包含相互关联的数据

  • playersTable
  • participationTable
  • hotelsTable
  • bookingsTable

我正在尝试检索玩家的预订,请记住,有些房间可能有2个同伴而有些房间不会

MYSQL表物理设计以这种方式构建

playersTable

  • playerID
  • playerFullName
  • playerCountryID

ParticipTable

  • P_ID
  • championshipId
  • playerId
  • countryId
  • 状态
  • booking_status

hotelsTable

  • hotelId
  • hotelName
  • championshipId

预订

  • B_ID
  • player1_id
  • player2_id
  • hotelId
  • arrivalTime

我要做的是SELECT所有预订,并将它们列在一个表中,它可以显示两个玩家,1号和2号。

我正在使用此查询来获得结果:

    SELECT bookingsTable.*, playersTable.*, participantsTable.*, hotelsTable.* 
    FROM bookingsTable 
    LEFT JOIN participationTable 
    ON bookings.player1_id= participants.p_id 
    LEFT JOIN playersTable ON participants.playerID = players.playerID 
    LEFT JOIN hotelsTable ON bookings.hotelId = hotels.hotelId

我只有一个玩家,所以我添加了我添加了另一个选择player2_id的查询但是当循环结果时,我无法让它正常工作,但我可以得到player2_id号而不是这个名字。

这是我的PHP代码,它加载结果,总是赞赏一种帮助。

<?php do { ?>
       <tr>
         <td><?php echo $row_booking_retrival['id']; ?></td>
         <td><?php echo $row_booking_retrival['playerFullname']; ?></td>
         <td><?php echo $row_booking_retrival['playerFullname']; ?></td>
         <td><?php echo $row_booking_retrival['hotelName']; ?></td>
         <td><?php echo $row_booking_retrival['arrivalDate']; ?></td>
         <td><?php echo $row_booking_retrival['arrivalTime']; ?></td>
         <td><?php echo $row_booking_retrival['departureDate']; ?></td>
         <td><?php echo $row_booking_retrival['departureTime']; ?></td>
         <td><?php echo $row_booking_retrival['Notes']; ?></td>
       </tr>
       <?php } while ($row_booking_retrival = mysql_fetch_assoc($booking_retrival)); ?>

提前致谢。

在此链接中查找物理设计和预期结果。

http://s18.postimg.org/gjsx4frfd/example.jpg

1 个答案:

答案 0 :(得分:0)

根据您的图片数据和图片中的预期结果,您正在寻找像

这样的查询
SELECT 
       b.b_id as BookingID,
       p1.fullname as player1full, 
       p2.fullname as player2full,
       h.hotelName as hotelname,
       b.arrival as arrivalDate
FROM 
       bookingsTable b
LEFT JOIN
       participationTable pT1 ON b.player1 = pT1.p_id
LEFT JOIN
       participationTable pT2 ON b.player2 = pT2.p_id
LEFT JOIN 
       playersTable p1 ON pT1.playerID = p1.playerID 
LEFT JOIN 
       playersTable p2 ON pT2.playerID = p2.playerID 
LEFT JOIN 
       hotelsTable h ON b.hotelid = h.hotelId

然后返回结果 - enter image description here

SQL小提琴 - http://sqlfiddle.com/#!2/68cd27/2