簡體   English   中英

SQL查詢返回錯誤結果

[英]SQL query returning wrong results

在我的網站上,用戶可以從32名球員中選擇球員。 首發陣容中有15個位置,因此需要從32個球員陣容中選擇15個球員。

如下圖所示,1個播放器可以扮演多個位置:

在此處輸入圖片說明

現在,當用戶從小隊中選擇起跑線時,需要在兩個位置上都可以打出多個位置的特定球員姓名(如上圖所示),不幸的是,這在您所看到的情況下不起作用下圖:

在此處輸入圖片說明

如果您看圖1,您會發現Badden Kerr可以同時打蠅頭和后衛。

問題

在選擇列表中,沒有顯示玩家的次要位置。 舉個例子,如果您再次看圖1,您會看到Badden Kerr可以同時打蠅頭和后衛。 但是在第二張圖片中,后衛位置為空,Baden Kerrs的名字未出現在其次要位置(后衛)


當我在Phpmyadmin中運行以下sql語句時:

SELECT *
FROM `allsquads`
WHERE `Team` = 'Blues'
AND `Position` = 'flyhalf'
AND `Secondary` = 'fullback'

您可以在下圖中看到返回的正確結果: 在此處輸入圖片說明

但是,當我嘗試在PHP代碼中運行相同的SQL語句時,會給我錯誤的/不希望的結果(如您在image2中所看到的)

我的PHP代碼如下:

// assign each position to array variable position
        $position = array(
            "prop",
            "hooker",
            "prop",
            "lock",
            "lock",
            "flank",
            "flank",
            "no8",
            "scrumhalf",
            "flyhalf",
            "center",
            "center",
            "wing",
            "wing",
            "fullback"
        );
        // for loop to loop through the number of positions in the team, which will be used to query DB
        $size     = sizeof($position);
        for ($i = 0; $i < $size; $i++) {
            // Query For positions
            $sqlprops = mysql_query("SELECT * FROM `allsquads` 
                                     WHERE `Team` = '$t1select'  
                                     AND `Position` = '$position[$i]' 
                                     OR `Secondary` = '$position[$i]'") or die(mysql_error());

新問題當我執行以下查詢時

SELECT * FROM `allsquads` 
                               WHERE `Team` = '$t1select'  
                                AND `Position` = '$position[$i]' 
                                OR `Secondary` = '$position[$i]'") or die(mysql_error());

查詢現在顯示兩個位置的球員,但顯示不在選擇團隊中的其他球員?

任何幫助或建議,將不勝感激

先感謝您

您在PHP代碼中的查詢不會產生期望的結果,因為您已將PositionSecondary設置為相同的值。 根據您提供的示例數據,該數據將不會返回任何內容。

如果您正在尋找一個查詢來選擇合格的玩家來參加比賽,則可以將查詢更改為以下形式:

SELECT * FROM `allsquads` 
WHERE `Team` = '$t1select'  
AND (`Position` = '$position[$i]' OR `Secondary` = '$position[$i]')

您應該優化數據庫結構。 盡管有很多方法可以解決您的問題,但我認為最好對表格進行歸一化處理,以便您有一個球員表和另一個具有球員ID和可能位置的表(如果您真的在乎是否(這是主要職位或次要職位,您也可以為其添加一個字段)。

所以你的players表是

╔═══════════╦═════════════╗
║ player_id ║ player_name ║
╠═══════════╬═════════════╣
║ 1         ║ John Doe    ║
╚═══════════╩═════════════╝

如果需要,還可添加更多內容; 閱讀問題后,我對您結構的其余部分不清楚。 positions表將是:

╔═══════════╦═══════════╦═══════════╗
║ player_id ║ position  ║ role      ║
╠═══════════╬═══════════╬═══════════╣
║ 1         ║ flyhalf   ║ primary   ║
║ 1         ║ fullback  ║ secondary ║
╚═══════════╩═══════════╩═══════════╝

然后要查找所有玩select `players`.`player_name` from `players`,`positions` where `positions`.`position` = "flyhalf" and `players`.`player_id`=`position`.`plr_id`玩家,您可以select `players`.`player_name` from `players`,`positions` where `positions`.`position` = "flyhalf" and `players`.`player_id`=`position`.`plr_id`查詢select `players`.`player_name` from `players`,`positions` where `positions`.`position` = "flyhalf" and `players`.`player_id`=`position`.`plr_id`

此外,你可以(並且可能應該)正常化的位置名稱到另一個表,所以positions.position是一個整數引用表possible_positions

╔════════╦═══════════╗
║ pos_id ║ position  ║
╠════════╬═══════════╣
║ 1      ║ flyhalf   ║
║ 2      ║ fullback  ║
╚════════╩═══════════╝

此外,這樣做可以使您保留數據庫中可能位置的列表以及作為數據庫查詢,而不是像當前那樣硬編碼到PHP數組中。

至少,這應該可以幫助您入門。 數據庫規范化和從一開始就具有適當的結構可能對您構造這些查詢有很大幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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