【发布时间】:2015-12-18 16:19:43
【问题描述】:
我目前正在尝试创建一个可以由 4 种可能类型组成的旅行路线。这些是航班、住宿、游轮和杂项(租车等)。
我正在将这些值从 MySQL 数据库加载到 XML 中(一切正常),然后使用 XSL 和 FOP 将其转换为 PDF。
我正在尝试根据我的需要构建 xml 的最佳方式,基本上我希望它在 PDF 中看起来像这样
22NOV London to JFK
........
22NOV Hilton Hotel, New York
........
25NOV JFK to London
.......
我是不是最好像这样构造 xml 并使用 xsl 分组来转换
<itinerary>
<flights>
<flightDate>...</flightDate>
..........
</flights>
<accommodation>
<accommodationDate>.....</accommodationDate>
.........
</accommodation>
<cruise>......</cruise>
.......
或者像这样。
<itinerary>
<leg date ="">
<flights>.....</flights>
<accommodation>......</accommodation>
<cruise>......</cruise>
.......
</leg>
<leg date = "">
......
</leg>
分组整理最好用java/mysql还是xsl? 如果有的话,哪种方式更好? 非常感谢任何帮助,希望这是有道理的。
更新:
这是获取航班详细信息的 SQL,以及相同的巡航、住宿等。
SELECT
flightDate, air1.airportName, air2.airportName,
flightNumber, departureTime, arrivalTime
FROM itinerary
LEFT JOIN flights ON flights.itineraryID = itinerary.itineraryID
LEFT JOIN airports air1 ON air1.airportID = flights.flightFrom
LEFT JOIN airports air2 ON air2.airportID = flights.flightTo
LEFT JOIN bookings ON itinerary.bookingID = bookings.bookingID
WHERE bookingRef='" + bookingRef + "'";
在 SQL 编辑器 (SQLYog) 中返回结果很好,在带有系统输出的 java 中很好,但在编组时仅添加适当次数的最后一条记录。 (我假设的结构问题)。
真正的问题是我最好将所有查询合并为一个而不是四个单独的,因为它们非常相似?使用外部/右连接等(被这些混淆)?
很久没有做SQL了。
进一步更新:
已将 sql 更改为以下,似乎更接近预期结果,但未定义第二个表列名称,将它们显示在其他表列中。
SELECT
flightDate, air1.airportName, air2.airportName, flightNumber,
departureTime, arrivalTime
FROM itinerary
LEFT OUTER JOIN
flights ON itinerary.itineraryID = flights.itineraryID
LEFT JOIN
airports AS air1 ON air1.airportID = flights.flightFrom
LEFT JOIN
airports AS air2 ON air2.airportID = flights.flightTo
LEFT JOIN
bookings ON bookings.bookingID = itinerary.bookingID
WHERE
bookings.bookingRef = '000001'
UNION
SELECT
accommodationDate, accommodationName, duration, roomType, boardBasis,
notes
FROM
itinerary
LEFT OUTER JOIN
accommodation ON itinerary.itineraryID = accommodation.itineraryID
LEFT JOIN
bookings ON bookings.bookingID = itinerary.bookingID
WHERE
bookings.bookingRef = '000001';
任何帮助表示赞赏。
【问题讨论】: