我需要在其主要部分中拆分任何mysql select语句:SELECT
,FROM
,ALL THE JOINS(如果有),WHERE
(如果存在),{ {1}}(如果存在),GROUP BY
(如果存在),HAVING
(如果存在),ORDER BY
(如果存在)......
我尝试使用正则表达式,但我对它们不是很好......
对于SELECT,正则表达式很简单(在字符串的开始处出现的任何SELECT - LIMIT
),但在那之后我偶然发现...我知道这就是'FROM'不能包含在()中 - 这意味着它来自一个subselect ...而且我认为select(JOINS,WHERE,GROUP BY等)的所有其他部分都符合这条规则......
但我不知道怎么写这样的规则......我希望有人可以帮助我...
表示选择语句:
^SELECT
我正在寻找的结果将是这样的:
SELECT SQL_CALC_FOUND_ROWS (SUM(TIME_TO_SEC(audioMelodii.durata))/60) AS durataTotal, (SELECT COUNT(audioMelodii.id) FROM audioMelodii) AS nrMelodii, audioArtisti.nume AS artist, audioAlbume.*
FROM audioAlbume
LEFT OUTER JOIN audioMelodiiAlbume ON (audioMelodiiAlbume.idAlbum=audioAlbume.id)
LEFT OUTER JOIN audioMelodii ON (audioMelodii.id=audioMelodiiAlbume.idMelodie)
LEFT OUTER JOIN audioArtisti ON (audioAlbume.idArtist=audioArtisti.id)
WHERE audioAlbume.idArtist='$idArtist'
GROUP BY audioAlbume.id
ORDER BY dataLansare DESC, id DESC
LIMIT 0,10
等...
非常感谢你! 一切顺利!答案 0 :(得分:2)
SQL不是可以使用正则表达式解析的语言 你真的需要使用一个完整的SQL解析器来完成这项任务。
另见:
答案 1 :(得分:2)
由于SQL的递归复杂性(子查询,子子查询,可能会在多个地方发生),因此无法使用正则表达式轻松完成此操作。
也许如果你解释了你的最终目标,我们可以帮助你找到更好的解决方案。