【发布时间】:2009-11-04 23:14:08
【问题描述】:
我需要在其主要部分拆分任何 mysql select 语句:SELECT、FROM、所有连接(如果有)、WHERE(如果存在)、GROUP BY(如果存在) )、HAVING(如果存在)、ORDER BY(如果存在)、LIMIT(如果存在)...
我尝试使用正则表达式,但我不太擅长使用它们...
对于 SELECT,正则表达式很简单(字符串开头的任何 SELECT-^SELECT),但在那之后我偶然发现......我只知道'FROM'不能包含在()中 - 其中将意味着它来自子选择...我认为选择的所有其他部分(JOINS、WHERE、GROUP BY 等)都将匹配此规则...
但是我不知道怎么写这样的规则……希望有人能帮助我……
对于选择语句:
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'";
等等……
非常感谢! 万事如意!
【问题讨论】: