0

誰か助けてくれませんか?値を取得するチェックしたい列が単一または値の配列と混在しているmysqlテーブルのすべての値を選択したい.......もっと明確にするために、多くのメッセージをすべて保存するテーブルがあります1 つまたは複数の受信者への送信者....

私の機能は

public static function find_messagesTo_by_user_id($mess_to=0) {
          global $database;
          $mess_to = $database->escape_value($mess_to);
          $sql  = "SELECT * FROM ".self::$table_name;
          $sql .= " WHERE mess_to = '{$mess_to}'";
          $sql .= " AND mess_deleted = 0";
          $sql .= " ORDER BY mess_created_date DESC";
          $result_array = parent::find_by_sql($sql);
          return $resultrray;
      }

したがって、「mess_to」には配列と単一の値があります....それらは数値のみですLike (1, 15, 25 ,26 ,27 , array(1,25, 27) , 31, 42, .......)

お願いします、私はそれに頭を壊します:)

私は何か助けを待っていますか?

4

3 に答える 3

1

@Maluchiの答えに基づいています。データが次のようになっていることを確認します。

| mess_to         |
+-----------------+
| ,123,           |
| ,123,456,152,1, |
| ,456,567,       |
| ,3,             |

したがって、各値を で囲みます,。その後、安全に行うことができます:

WHERE `mess_to` LIKE "%,{$mess_to},%"

これにより$mess_to = 1、1 行目ではなく 2 行目のみに一致することが保証されます。


データを非正規化し、テーブルを作成することもできますJOIN

于 2013-10-11T16:17:51.003 に答える
1

私が正しく読んでいれば、 $mess_to が関数に渡され、単一の値を含むか、配列で渡すことができます。

複数の値を照合する場合、SQL はカンマ区切りのリストを探す必要があります。where 句は、リストに対して EQUAL ではなく、リスト内にある必要があります。

試す:

public static function find_messagesTo_by_user_id($mess_to=0) {
      global $database;
      $mess_to = $database->escape_value($mess_to);
      $sql  = "SELECT * FROM ".self::$table_name;
      $sql .= " WHERE mess_to IN (" . implode(',', $mess_to) . ")";
      $sql .= " AND mess_deleted = 0";
      $sql .= " ORDER BY mess_created_date DESC";
      $result_array = parent::find_by_sql($sql);
      return $resultrray;
  }

特に次の行を参照してください。

$sql .= " WHERE mess_to IN (" . implode(',', $mess_to) . ")";

geomagas のコメントでコードを編集しました! (ジオマガスありがとう!)

于 2013-10-11T16:20:13.517 に答える