php 或 mysql substring_index 中的字符串切片
string slicing in php or mysql substring_index
必须对以下查询的输出进行切片。
GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id) AS sub,
输出是
3-Math
4-Science
我正在使用 PHP substr
$sub=substr(strstr($row['sub'], '-'), 1);
所以结果会是
Math
Science
但是如果它可以在 mysql 中切片会更好,因为我认为它减少了 php 代码并减少了从数据库中获取的数据。
所以我试过SUBSTRING_INDEX
SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id), '-', -1) AS sub,
但是我只有一行
Science
这里,SUBSTRING_INDEX
会影响到select行吗?如果不是,我怎样才能获取预期的输出
您应该尝试使用 REPLACE
SELECT
REPLACE(GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id), '-', 1) AS sub
我还会将 DISTINCT 放在 GROUP_CONCAT 之外,并正确使用 GROUP BY
您不需要 CONCAT
subject.id
。您可以直接在 subject.en_title
上使用 DISTINCT
子句。请改用以下表达式:
GROUP_CONCAT(DISTINCT subject.en_title ORDER BY subject.id) AS sub
必须对以下查询的输出进行切片。
GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id) AS sub,
输出是
3-Math
4-Science
我正在使用 PHP substr
$sub=substr(strstr($row['sub'], '-'), 1);
所以结果会是
Math
Science
但是如果它可以在 mysql 中切片会更好,因为我认为它减少了 php 代码并减少了从数据库中获取的数据。 所以我试过SUBSTRING_INDEX
SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id), '-', -1) AS sub,
但是我只有一行
Science
这里,SUBSTRING_INDEX
会影响到select行吗?如果不是,我怎样才能获取预期的输出
您应该尝试使用 REPLACE
SELECT
REPLACE(GROUP_CONCAT(DISTINCT subject.id, '-', subject.en_title ORDER BY subject.id), '-', 1) AS sub
我还会将 DISTINCT 放在 GROUP_CONCAT 之外,并正确使用 GROUP BY
您不需要 CONCAT
subject.id
。您可以直接在 subject.en_title
上使用 DISTINCT
子句。请改用以下表达式:
GROUP_CONCAT(DISTINCT subject.en_title ORDER BY subject.id) AS sub