2009-12-16 2 views
1

VARCHAR 열 url이있는 데이터베이스가 있습니다. 어떤 url 값을 가진 행이 다른 행보다 우선 순위를 가지므로 date 행 (내림차순)으로 정렬되도록 행을 가져 오려고하므로 ORDER BY 'url' DESC, 'date' DESC은 먼저 알파벳 순으로 정렬하므로 작동하지 않습니다. 그것을 할 수젠드 프레임 워크 SQL 선택 쿼리 생성 (ORDER BY)

ID | Url | Date 
4 | http://...| 1005 
5 | http://...| 1004 
1 | http://...| 1001 
3 |   | 1003 
2 |   | 1002 

어떤 것이 적절한 젠드 프레임 워크 방식 (또는 적어도 SQL 쿼리에) :

표 :

ID | Url | Date 
1 | http://...| 1001 
2 |   | 1002 
3 |   | 1003 
4 | http://...| 1005 
5 | http://...| 1004 

결과 순위 기본적으로, 다음과 같이 보일 것인가? SQL와

답변

2

, 그럴 수 그래서 뭔가 같은 ...

당신은뿐만 아니라 URL 필드에 null 값을 허용하는 경우 그것은 추한의 종류를 가져옵니다.

SELECT * , IF(LENGTH(url) = 0 OR url IS NULL, 1, 0) AS nourl 
FROM url ORDER BY nourl ASC 

기본적으로 URL 길이가 0보다 크거나 null인지 확인합니다. 그들이 있다면, 그들은 일종의 바닥에 있습니다.

+0

아마도 CASE 문을 사용하는 것이 ANSI 표준에 있기 때문에 더 좋습니다. 또한 case/if 문을 ORDER by 절에 직접 입력 할 수 있으므로 더미 열을 선택하지 않아도됩니다. – asgeo1

+0

그 문제를 해결할 수 있습니다. 나는 항상 그것들이 저장 프로 시저보다 많다고 생각했다. 개인적으로 여전히 열 목록에 남겨 두었을 것입니다. nourl 컬럼에서 로직을 수행 할 수 있으려면 라인 아래로 좋을 수도 있습니다. –

0

select 문에 order by field('field_name', value) desc을 사용할 수 있습니다.