首页 > 解决方案 > 如何从 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。

标签: phpmysql

解决方案


您只需使用然后将其拆分并循环遍历数组来获取数据。

数据库类(提供此类,以便您了解我是如何获取数据的)

<?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];
    }
}

推荐阅读