我在数据库中为tourneyID,Selected,Paid,Entered,date设置值,然后用冒号分隔每个选择
所以我有一个看起来像这样的字符串
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%')
有关如何实现这一目标的任何想法?
答案 0 :(得分:2)
通过以您正在使用的格式存储数据,您将使此任务变得更加困难。
您需要将tourney矢量存储在单独的表中。每个锦标赛都在一个单独的行中,每个逗号分隔的字段都在一个单独的列中。
然后,您可以使用SQL查找特定匹配的$ tid行,甚至可以使用索引来帮助加快搜索速度。
此外,MySQL日期应以YYYY-MM-DD格式存储。
另请参阅我对Is storing a delimited list in a database column really that bad?
的回答答案 1 :(得分:0)
不要使用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'];
}
}
答案 2 :(得分:0)
以下是使用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'");