如何使用Codeigniter从数据库中检索hass或逗号分隔的值?

时间:2019-02-20 10:39:36

标签: php mysql codeigniter phpmyadmin

我正在参与一个CodeIgniter项目。在该项目中,另一个开发人员在数据库中插入cat_id包括#分隔,如#1#。当插入两个cat_id时,值存储在数据库中,例如#1 ## 2#。

现在,我想检索cat_id并将其加入另一个表。

3 个答案:

答案 0 :(得分:0)

好吧,我在第一次尝试中就犯了一个错误(找到下面的提示),希望这应该能起作用:

$text = "#1##2##10000";
$ids = array_filter(explode('#', $text));

// output
array(3) { [1]=> string(1) "1" [3]=> string(1) "2" [5]=> string(5) "10000" }

如果希望将阵列键重新设置为从0开始重新设置,则奖励:

$ids = array_values(array_filter(explode('#', $text)));

// output
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(5) "10000" }

错误的旧答案:

$text = "#1##2#";

$ids = [];
for ($i=0; $i < strlen($text); $i++) { 
    if ($text[$i] != '#') {
        $ids[] = $text[$i];
    }
}

var_dump($ids);
// produced result
array(2) { [0]=> string(1) "1" [1]=> string(1) "2" }

答案 1 :(得分:0)

  

我想从#1 ## 2#中检索1和2。我不更改数据库   或插入代码

我强烈建议您将PHP代码和MySQL表更改为支持规范化。
因为从#1##2#获取(“解析”)cat_id号所需的查询是一场噩梦,而且效果不佳。
查询看起来或多或少像这样,而无需额外连接到另一个表。

SELECT 
  DISTINCT
   REVERSE(
      REVERSE(
     SUBSTRING_INDEX(SUBSTRING_INDEX(<table>.<column>, '##', rows.row), '##', -1) 
   ) >> 1 ) AS cat_id
FROM (
  SELECT 
   @row := @row + 1 AS ROW
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row1
  CROSS JOIN (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row2  
  CROSS JOIN (
    SELECT @row := 0 
  ) init_user_params
)
 ROWS
CROSS JOIN 
 <table>

但是我觉得接下来的问题来了。

  

如何将SQL转换为codeignitor的代码?

所以现在有一个PHP示例来解析cat_ids

PHP代码

<?php
  $text = "#1##2##10000";

  $cat_ids = explode("##", trim($text, '#'));

  var_dump($cat_ids);
?>

结果

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(5) "10000"
}

答案 2 :(得分:0)

您可以尝试一下,

$str = "#1##2#";
preg_match_all('|\d+|',$str,$matches);
print_r($matches);

这里在工作demo