TP5 查询 字符串条件如何实现 当查询条件是 (1,3,8) 被查询的值是(2,3,4),两个字符串 中有一个相同的就查出来
时间: 2024-03-09 07:45:55 浏览: 66
如果需要查询两个字符串中有一个相同的值,可以使用 `exp` 方法和 `like` 条件来构建查询。例如,如果查询条件为 `(1,3,8)`,被查询的字段为 `field`,可以这样构建查询:
```php
$ids = '1,3,8';
$list = Db::name('table')
->where(function($query) use ($ids) {
$query->where('find_in_set(field, :ids)', ['ids' => $ids])
->whereOr('field', 'like', '%,'.$ids.',%')
->whereOr('field', 'like', $ids.',%')
->whereOr('field', 'like', '%,'.$ids);
})
->select();
```
其中,`find_in_set(field, :ids)` 表示在 `field` 字段中查找值为 `:ids` 的值,`:ids` 是绑定查询参数的占位符。`whereOr` 方法用于构建或逻辑条件,`%` 表示匹配任意字符,`,` 表示逗号分隔的字符串列表中的分隔符。这样构建的查询,如果被查询的字段中包含 `(1,3,8)` 中的任意一个值或多个值,都会被查询出来。
相关问题
TP5 查询 字符串条件如何实现 当查询条件是 (1,3,8) 数据库字段也是(2,3,4) 这种情况改如何查询呢?
在 ThinkPHP 5 中,可以使用 `exp` 方法来实现查询字符串条件。例如,如果查询条件为 `(1,3,8)`,数据库字段为 `(2,3,4)`,可以这样构建查询:
```php
$ids = '1,3,8';
$list = Db::name('table')
->where('find_in_set(field, :ids)', ['ids' => $ids])
->select();
```
其中,`find_in_set(field, :ids)` 表示在 `field` 字段中查找值为 `:ids` 的值,`:ids` 是绑定查询参数的占位符。
如果查询条件为字符串 `1,3,8`,可以使用 `exp` 方法构建查询:
```php
$ids = '1,3,8';
$list = Db::name('table')
->where('field in ' . Db::raw("( $ids )"))
->select();
```
其中,`Db::raw` 方法用于将字符串转换为原始查询语句,避免字符串中的 `,` 被解析为查询语句中的分隔符。
tp5 如果需要查询两个字符串中有一个相同的值
在tp5中,您可以使用PHP中的字符串函数`strpos()`来判断一个字符串中是否包含另一个字符串。如果两个字符串中有一个相同的值,则可以使用以下代码进行判断:
```php
$str1 = "hello world";
$str2 = "world";
if(strpos($str1, $str2) !== false) {
echo "The two strings have a common value.";
} else {
echo "The two strings do not have a common value.";
}
```
这段代码中,我们首先定义了两个字符串 `$str1` 和 `$str2`,然后使用`strpos()`函数来判断 `$str1` 是否包含 `$str2`,如果包含则说明两个字符串有相同的值。需要注意的是,`strpos()`函数返回的是匹配到的第一个字符所在的位置,如果返回值不是false,则说明找到了相同的值,因此需要使用`!== false`来判断。
阅读全文