php - 如何从 mysql 连接列中选择前 3 个值
问题描述
我在一个名为 multi_values 的表中有一个列。
在该列中,我使用 + 分隔符插入多个值。
例如
01234567891111+01234567891112+01234567891113+01234567891114
此列可能包含有时是两个值,有时是动态地包含 4 个值。
所以我想从该列中获取前 3 个值。
如果该列仅包含 2 个值,则为 2 ,如果它仅包含一个值,则为 1 个。
我尝试使用 mysql 子字符串。
但是该列中的值不是固定长度。
所以我需要一个选择查询来从该列中获取前 3 个值。
任何帮助将不胜感激。
`Answer`
在插入特定列时,值以 + 符号开头。像 +123+2344+34563 这样的。所以这是解决方案。
SUBSTR(
列名,2)
。所以这将删除第一个 + 符号。下面一个给出我期望
的SUBSTRING_INDEX(SUBSTR(
column_name ,2),'+',3)
。所以它将返回 3 个 ID。
解决方案
您只需使用然后将其拆分并循环遍历数组来获取数据。
数据库类(提供此类,以便您了解我是如何获取数据的)
<?php
class Database
{
//Instance of connection
private static $_instance = null;
//database connection variables
private $servernane;
private $username;
private $password;
private $dbname;
private $options;
private $dsn;
// database operation variables
private $_pdo;
public function __construct()
{
$this->servername = "localhost";
$this->username = "root";
$this->password = "";
$this->dbname = "crud";
$this->options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING,
];
try
{
$this->dsn = "mysql:host={$this->servername};dbname={$this->dbname}";
$this->_pdo = new PDO($this->dsn, $this->username, $this->password);
echo "Connected sucessfully to the database";
} catch (PDOExeption $e)
{
echo "connection failed: " . $e->getMessage();
}
}
public static function getInstance()
{
if (!isset(self::$_instance)) {
self::$_instance = new Database();
}
return self::$_instance;
}
public function query($sql, $params = array())
{
$stmt = $this->_pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
}
现在这是解决方案。
<?php
require_once './classes/Database.class.php';
$db = Database::getInstance();
$stmt = $db->query('select multi_values from example WHERE id = :id',
array('id' => 1));
$data = $stmt->fetch()['multi_values'];
$data_arr = explode("+", $data);
if (count($data_arr) === 1 ) {
echo $data_arr[0];
}elseif (count($data_arr) === 2 ) {
for ($x = 0; $x <= 1; $x++) {
echo $data_arr[$x];
}
}elseif (count($data_arr) === 3 ) {
for ($x = 0; $x <= 2; $x++) {
echo $data_arr[$x];
}
}
elseif (count($data_arr) === 4 ) {
for ($x = 0; $x <= count($data_arr) - 2; $x++) {
echo $data_arr[$x];
}
}
推荐阅读
- javascript - 使用 excel-js 插入值时使用公式引用其他列的列中的错误
- django-rest-framework - Django Rest Freamwork:允许对 api 的特定部分进行补丁
- swift - PKAddPassButton 根本不显示图标
- python - 如何在 Python 中“扩展”数组?
- r - 根据R中行的其余部分替换变量的值
- ios - 具有 SnapKit 依赖项的情节提要中的 CocoaPods“找不到图像”错误
- ios - 更新 Xcode 12.5 和 ios 14.5 时出现抖动问题
- javascript - 具有多个级别的堆叠 D3 条形图
- html - 如何使用 css 或 js 实现这种动画?
- java - 爪哇 | 特立独行的 SSH | 无法协商传输组件 | sha1 md5 | sha2-512 sha2-256