从具有csv mysql的列中选择数据

时间:2016-11-19 10:24:32

标签: php mysql

相当简单的一个但是很努力,我有一个表中有一个名为'teams'的列,其中一些行有多个团队并且以逗号分隔,所以一个人可能有team2,team3,team4而另一个可能有SELECT

我想要做的是执行team1查询,这样,如果一个人有team1而另一个人有$sql = "SELECT * FROM respondant_data WHERE respondant_team = 'Central Team'"; $result = $conn->query($sql); if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ echo $row["respondant_firstname"]; echo $row["respondant_lastname"]; echo $row["respondant_team"]; echo '<br>'; } } else{ echo 'no results'; } ,那么尽管该列中还有其他小组,但它会输出它们。

以下是我查询的基础:

$sql = "SELECT * FROM respondant_data WHERE FIND_IN_SET('Central Team', respondant_team) > 0";

正如你可以猜到的那样,它不会给我任何回报,因为所有拥有'中央团队'的用户也会在其专栏中有其他团队。

**更新**

因此,根据以下建议,我对我的查询进行了更新:

access token

所以它确实会返回一些数据但不是全部,所以它仍然会在列中返回单个值的人。

2 个答案:

答案 0 :(得分:0)

 This solution provides you an case-insensitiv text search and prints every Member who is in team 1:  



$YOURNEEDLE = 'team 1';
                $sql = "SELECT * FROM respondant_data WHERE respondant_team = 'Central Team'";
                $result = $conn->query($sql);
                if($result->num_rows > 0){
                    while($row = $result->fetch_assoc()){
                        if(stristr($row["respondant_team"],$YOURNEEDLE)) {
                            echo $row["respondant_firstname"];
                            echo $row["respondant_lastname"];
                            echo $row["respondant_team"];
                            echo '<br>';
                        }
                    }
                } else{
                    echo 'no results';
                }

有很多方法可以解决您的问题,另一种方法是:

            $needle = 'team 1';
            $sql = "SELECT * FROM respondant_data WHERE respondant_team = 'Central Team'";
            $result = $conn->query($sql);
            if($result->num_rows > 0){
                while($row = $result->fetch_assoc()){
                 $arrayTeams  =     explode(', ',$row["respondant_team"]);
                    if(in_array($needle, $arrayTeams)) {
                        echo $row["respondant_firstname"];
                        echo $row["respondant_lastname"];
                        echo $row["respondant_team"];
                        echo '<br>';
                    }
                }
            } else{
                echo 'no results';
            }

答案 1 :(得分:-1)

不是最好但应该工作

SELECT * FROM respondant_data WHERE respondant_team RLIKE 'Central Team(?:,|$)'

所以在php中构建查询就像这样

$sql = 'SELECT * FROM respondant_data WHERE respondant_team RLIKE \''.$yourteamname.'(?:,|$)\'';