2009-11-04 107 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(子查詢,子子查詢的遞歸的複雜性,它可以發生在幾個地方。

也許如果你解釋你的最終目標,我們可以幫助你找到更好的解決方案。