1

我在我的数据库中为 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%')

关于如何实现这一目标的任何想法?

4

3 回答 3

2

通过以您正在使用的格式存储数据,您使这项任务变得更加困难。

您需要将锦标赛向量存储在单独的表中。每个锦标赛都放在单独的行中,每个逗号分隔的字段放在单独的列中。

然后,您可以使用 SQL 查找特定匹配的 $tid 行,甚至可以使用索引来帮助加快这些搜索。

此外,MySQL 日期应以 YYYY-MM-DD 格式存储。

另请参阅我对在数据库列中存储分隔列表真的那么糟糕吗?

于 2012-12-15T21:46:07.520 回答
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'];
  }
}
于 2012-12-15T04:22:21.570 回答
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'");
于 2012-12-15T21:30:58.123 回答