繁体   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