2009-11-04 2 views
0

으로 select 문을 분할 나는 그것의 주요 부분에 어떤 MySQL은 SELECT 문을 분할해야합니다 SELECT, FROM 모든 조인 (가있는 경우), WHERE (있는 경우), GROUP BY는 (있는 경우) HAVING (있는 경우), ORDER BY (있는 경우), LIMIT는 (있는 경우) ...는 정규 표현식

내가 정규식을 사용했지만, 내가 SELECT 위해 ... 그들과 함께 아주 좋은 아니에요 정규식은 간단했다 (문자열의 시작 부분에 오는 모든 선택 - ^SELECT),하지만 그 후에 나는 만났다 ... 모든 것이 'FROM'이 (-)에 포함되어서는 안된다는 것을 알고있다 - 이것은 subselect에서 나온 것임을 의미한다. ... 그리고 나는 그 모두를 생각한다. 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'";

등 ...

대단히 감사합니다! 최고!

답변

2

당신으로 인해 여러 곳에서 발생할 수있는 SQL (하위 쿼리, 하위의 서브 쿼리의 순환 복잡성에 정규 표현식 쉽게이 작업을 수행 할 수 없습니다.

궁극적 인 목표를 설명하면 더 나은 솔루션을 찾을 수 있도록 도와 줄 수 있습니다.