мне нужно разделить любой MySQL отборного заявление в его основных частях: SELECT
, FROM
, все стыков (если таковой имеется), WHERE
(если она существует), GROUP BY
(если она существует), HAVING
(если она существует), ORDER BY
(если она существует), LIMIT
(если она существует) ...разделить отборное заявление с регулярным выражением
я попытался с помощью регулярных выражений, но я не очень хорошо с ними ... для выберите regex был прост (любой SELECT, который приходит в начале строки - ^SELECT
), но после этого я споткнулся ... все, что я знаю, что «FROM» не должно содержаться в() - это будет означать, что это из подзадачи ... и я думаю, что все другие части select (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'";
и т.д ...
большое спасибо! все лучшее!