使用正则表达式拆分select语句

时间:2009-11-04 23:14:08

标签: php regex select parsing

我需要在其主要部分中拆分任何mysql select语句:SELECTFROM,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

等...

非常感谢你! 一切顺利!

2 个答案:

答案 0 :(得分:2)

SQL不是可以使用正则表达式解析的语言 你真的需要使用一个完整的SQL解析器来完成这项任务。

另见:

答案 1 :(得分:2)

由于SQL的递归复杂性(子查询,子子查询,可能会在多个地方发生),因此无法使用正则表达式轻松完成此操作。

也许如果你解释了你的最终目标,我们可以帮助你找到更好的解决方案。