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 に答える