Skip to content

PHP 精确查询 baike_cate_ids 包含特定值

要在 PHP 中精确查询 baike_cate_ids 字段(格式为 ",3,4,6,10,123,")是否包含特定值(例如 4),你需要使用 LIKE 语句并确保匹配的是完整的逗号分隔值。

方法一:使用 LIKE 查询

php
$searchValue = 4; // 要查询的值

// 构建查询条件
$where = "baike_cate_ids LIKE '%,$searchValue,%'";

// 或者使用参数化查询防止SQL注入
$where = "baike_cate_ids LIKE ?";
$params = ["%,$searchValue,%"];

方法二:使用 FIND_IN_SET 函数(MySQL)

如果你的数据库是 MySQL,可以使用更方便的 FIND_IN_SET 函数:

php
$searchValue = 4; // 要查询的值

// 构建查询条件
$where = "FIND_IN_SET($searchValue, TRIM(BOTH ',' FROM baike_cate_ids)) > 0";

// 参数化版本
$where = "FIND_IN_SET(?, TRIM(BOTH ',' FROM baike_cate_ids)) > 0";
$params = [$searchValue];

完整示例(使用 PDO)

php
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$searchValue = 4;

// 准备查询
$stmt = $pdo->prepare("SELECT * FROM your_table WHERE FIND_IN_SET(:value, TRIM(BOTH ',' FROM baike_cate_ids)) > 0");
$stmt->bindParam(':value', $searchValue, PDO::PARAM_INT);
$stmt->execute();

// 获取结果
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

注意事项

  1. 这种方法可以确保精确匹配,避免匹配到包含该数字的其他值(如 41 也会匹配 4 的问题)
  2. 如果可能,考虑将数据库设计改为使用关联表或多对多关系表,这样查询效率会更高
  3. 对于大型数据集,这种查询可能不够高效,可以考虑使用全文索引或其他优化方法

Binstork