如何筛选以相同字符开头的mysql选择?

uxhixvfz  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(401)
$dir = Volumes/animals/big

我从mysql表中选择值,从某个路径开始:

$sql = "SELECT path FROM files WHERE id = ? AND path LIKE '$dir%'";  
$q = $pdo->prepare($sql);
$q->execute([$id]);
$array = $q->fetchAll(PDO::FETCH_ASSOC);

array(4) {
  [0]=>
  array(1) {
    ["path"]=>
    string(149) "Volumes/animals/big/horses/shetland/amy.jpg" 
  }
  [1]=>
  array(1) {
    ["path"]=>
    string(149) "Volumes/animals/big/horses/shetland/sara.jpg" 
  }
 [2]=>
  array(1) {
    ["path"]=>
    string(149) "Volumes/animals/big/horses/shire/lord.jpg" 
  }
 [3]=>
  array(1) {
    ["path"]=>
    string(149) "Volumes/animals/big/elephant/borneo/mila.jpg" 
  }
[4]=>
  array(1) {
    ["path"]=>
    string(149) "Volumes/animals/big/map.jpg" 
  }

我只需要每个子路径的一个条目。这意味着,这里有三个条目以“volumes/animals/big/horses”开头。我只需要一个。我想达到的结果是:

array(2) {
      [0]=>
      array(1) {
        ["path"]=>
        string(149) "Volumes/animals/big/horses/shetland/amy.jpg" 
      }
     [1]=>
      array(1) {
        ["path"]=>
        string(149) "Volumes/animals/big/elephant/borneo/mila.jpg" 
      }
    [2]=>
      array(1) {
        ["path"]=>
        string(149) "Volumes/animals/big/map.jpg" 
      }

我不知道怎样才能做到这一点。我很感激你的任何想法。
重要提示:我需要在mysql中直接选择这个过滤器。不是用php

uelo1irk

uelo1irk1#

这可以在mysql中完成,因为您将路径的顶层传递到查询中。按以下方式更改查询:

$sql = "SELECT path, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(path, '$dir', -1), '/', 2) AS subpath
        FROM files 
        WHERE id = ? AND path LIKE '$dir%'
        GROUP BY subpath";

输出时间 $dir = 'Volumes/animals/big'; :

path                                            subpath     
Volumes/animals/big/elephant/borneo/mila.jpg    /elephant
Volumes/animals/big/horses/shetland/amy.jpg     /horses
Volumes/animals/big/map.jpg                     /map.jpg

相关问题