簡體   English   中英

如何從mysql表中選擇所有數據,其中列是數組或單個,我的值是否與此數組的一個項匹配?

[英]how to select all data from mysql table where column is an array or single and my value match with one item of this array?

請有人幫幫我嗎? 我想選擇mysql表中的所有值,我要檢查的列得到的值是一個值或一組數值.......所以更清楚我有一個表來存儲來自許多的所有消息發送者到一個或多個接收者....

我的職責是

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'有數組和單值....它們只是數字像(1,15,25,26,27,數組(1,25,27),31,42,.......)

拜托,我打破了我的頭腦:)

我在等什么幫忙?

以@ Maluchi的答案為基礎。 確保您的數據如下:

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

所以圍繞每個值, 然后你可以安全地做:

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

這樣可以確保$mess_to = 1僅匹配第2行,而不是第1行。


您還可以對數據進行非規范化,並將表格設置為JOIN

如果我正確讀取它,$ 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的評論! (謝謝geomagas!)

認為你的專欄是這樣的

| mess_to |
+---------+
| 1       |
| 1,2,3,4 |
| 2       |
| 3       |

你可以使用LIKE運算符:

$sql .= " WHERE mess_to LIKE '%{$mess_to}%'";

這將匹配mess_to具有字符串值$mess_to每一行(您的列數據類型應為字符串以使其工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM