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