2009-11-04 109 views
0

我需要拆分其主要部分中的任何mysql select语句:SELECT,FROM,所有联接(如果有的话),WHERE(如果存在),GROUP BY(如果存在), HAVING(如果存在的话),ORDER BY(如果存在的话),LIMIT(如果存在的话)......使用正则表达式拆分select语句

我尝试使用正则表达式,但我不是很好的他们... 对于Select the正则表达式很简单(任何SELECT在字符串开头-^SELECT开始),但之后我偶然发现......我所知道的是'FROM'不能包含在()中 - 这将意味着它来自一个子查询...我想这一切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

我要寻找的结果会是这样的:

$STATEMENT['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.*';
$STATEMENT['FROM']='FROM audioAlbume';
$STATEMENT['JOINS']='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)';
$STATEMENT['WHERE']="WHERE audioAlbume.idArtist='$idArtist'";

等等

非常感谢! 一切顺利!

回答

2

你不能用正则表达式做到这一点很容易由于SQL(子查询,子子查询的递归的复杂性,它可以发生在几个地方。

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