我正在参与一个CodeIgniter项目。在该项目中,另一个开发人员在数据库中插入cat_id包括#分隔,如#1#。当插入两个cat_id时,值存储在数据库中,例如#1 ## 2#。
现在,我想检索cat_id并将其加入另一个表。
答案 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)