>我正在我的数据库中为tourneyID,选择,付费,输入,日期设置值,然后用冒号分隔每个选择
所以我有一个字符串,可能看起来像这样
187,S,,,09-21-2013:141,S,,,06-21-2013:144,S,,,05-24-2013
但它也可能看起来像这样
145,S,,,07-12-2013:142,S,,,05-24-2013:187,S,,,09-21-2013
有时看起来像这样
87,S,,,07-11-2013:125,S,,,06-14-2013
我试图找到这个序列:187,S,,,09-21-2013
有这样的数据存储,因为我付钱给程序员为我编码。现在,随着我的学习,我发现这不是最好的解决方案,但这是我所拥有的,直到我学到更多并且它正在起作用。
我的问题是当使用 LIKE 时,它同时返回 187 和 87 值
$getTeams = mysql_query("SELECT * FROM teams
WHERE (team_tourney_vector LIKE '%$tid,S,P,,$tourney_start_date%'
OR team_tourney_vector LIKE '%$tid,S,,,$tourney_start_date%')
AND division='$division'");
我用FIND_IN_SET()
试过这个 但它只会返回此字符串的团队 ID
187,S,,,09-21-2013:141,S,,,06-21-2013:144,S,,,05-24-2013
并且找不到此字符串的团队 ID
145,S,,,07-12-2013:142,S,,,05-24-2013:187,S,,,09-21-2013
SELECT * FROM teams WHERE FIND_IN_SET('187',team_tourney_vector) AND (team_tourney_vector LIKE '%S,,,09-21-2013%')
关于如何实现这一目标的任何想法?
通过以您正在使用的格式存储数据,您使这项任务变得更加困难。
您需要将锦标赛向量存储在单独的表中。 每个锦标赛都在单独的行中,每个逗号分隔的字段都在单独的列中。
然后,您可以使用 SQL 查找特定的匹配$tid行,甚至可以使用索引来帮助加快这些搜索速度。
此外,MySQL 日期应以 YYYY-MM-DD 格式存储。
另请参阅我的回答 在数据库列中存储分隔列表真的那么糟糕吗?
不要使用 sql。使用 PHP strpos
要容易得多
$getTeams = mysql_query("SELECT * FROM teams WHERE division='$division'");
while ( $rows = mysql_fetch_array($getTeams) ) {
if ( strpos($rows['team_tourney_vector'],'187,S,,,09-21-2013') ) {
echo $rows['team_tourney_vector'];
}
}
<</div>
div class="one_answers"> 这是我使用 RLIKE 解决上述问题的方法
$tourney_start_date=date('m-d-Y', strtotime($tourney_start_date));
$vector = '"'.$tid.',S,,,'.$tourney_start_date.'"';
$getTeams = mysql_query("
SELECT * FROM `teams`
WHERE `team_tourney_vector`
RLIKE $vector
AND division='$division'");