相当简单的一个但是很努力,我有一个表中有一个名为'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
所以它确实会返回一些数据但不是全部,所以它仍然会在列中返回单个值的人。
答案 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.'(?:,|$)\'';