[英]dynamically select range of mysql columns using php
您好,感謝您的時間!
我正在嘗試使用 PHP 從 mysql 表中提取數據,並且對 mysql 和 php 都很陌生。
我有一個建立在賽車信息上的表格,其中記錄了以下比賽結果:日期、類型、WL1、L1、L2 等直到 L15
WL1 列包含從 L1 到 L15 的值,代表“獲勝車道 1” - 基本上是汽車在哪個車道排在第一位。 L1 到 L15 列包含賽車手的名字。 鑒於上述情況,我試圖在表格中顯示以下內容:
當 L1 到 L15 列中的數據與 WL1 列中的條目匹配時,日期、類型、WL1 和 L1 到 L15 的值為“贏家”。
例子:
-----------------------------------------
Date | Type | WL1| Winner
-----------------------------------------
May 5 | Rally | 13 | John
May 7 | Stock | 2 | Stewart
May 15 | Touring | 7 | Eddy
我可以使用以下代碼實現這樣的結果:
$sql = "SELECT * FROM races";
if($result = mysqli_query($conn, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>Date</th>";
echo "<th>Type</th>";
echo "<th>WL1</th>";
echo "<th>Winner</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['Date'] . "</td>";
echo "<td>" . $row['Type'] . "</td>";
echo "<td>" . $row['WL1'] . "</td>";
if($row['WL1'] == 'L1'){
echo "<td>" . $row['L1'] . "</td>";
}elseif($row['WL1'] == 'L2'){
echo "<td>" . $row['L2'] . "</td>";
話雖如此,我認為必須有一種比使用 if/elseif 語句迭代 15 個值更簡單的方法。 我已經嘗試了帶有增量值的“while”和“for”循環,但我只得到空結果或錯誤,很可能是由於我的經驗不足。 我還在 MySQL 中使用復雜的 CASE 語句復制了上述內容,但同樣,我試圖減少代碼行數。
如果有人可以建議一種更簡潔的方法來提取這些數據,無論是通過 MySQL 語句還是 PHP 代碼,我都會很感激。 如果你能指出一些很好的在線示例/教程,那就更好了——整個“教人釣魚”的事情......
您的數據結構是導致您出現問題的原因; 你真的應該有一個表格,將每場比賽的賽車手和車道連接起來,然后JOIN
。 話雖如此,您可以通過注意到$row['WL1']
是獲勝者的列名來簡化現有代碼,因此您可以簡單地將if
結構替換為:
echo "<td>" . $row[$row['WL1']] . "</td>";
我在這里創建了一個包含races
、 lanes
和racers
表的示例數據結構。 要從此結構查詢,您可以執行以下操作:
SELECT DATE_FORMAT(r.Date, '%b %e') AS Date, r.Type, r.Winner AS WL1, rs.Name AS Winner
FROM races r
JOIN lanes l ON l.Race = r.id AND l.Lane = r.Winner
JOIN racers rs ON rs.id = l.Racer
對於我的示例數據,其中給出:
Date Type WL1 Winner
May 5 Rally 13 John
May 7 Stock 2 Stewart
May 15 Touring 7 Eddy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.