【问题标题】:split select statement with regular expression使用正则表达式拆分选择语句
【发布时间】:2009-11-04 23:14:08
【问题描述】:

我需要在其主要部分拆分任何 mysql select 语句:SELECTFROM、所有连接(如果有)、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'";

等等……

非常感谢! 万事如意!

【问题讨论】:

    标签: php regex select parsing


    【解决方案1】:

    SQL 不是一种可以用正则表达式解析的语言。
    您确实需要使用成熟的 SQL 解析器来完成此任务。

    另见:

    【讨论】:

      【解决方案2】:

      由于 SQL 的递归复杂性(子查询、子子查询,可能出现在多个地方),您无法使用正则表达式轻松做到这一点。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 2023-02-13
        • 2021-04-23
        相关资源
        最近更新 更多