簡體   English   中英

使用php動態選擇mysql列的范圍

[英]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>";

我在這里創建了一個包含raceslanesracers表的示例數據結構。 要從此結構查詢,您可以執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM