2012-01-11 3 views
3

에 지불되었습니다. SQL 쿼리를 작성하는 데 문제가 있습니다. 내가 listings에 대한 테이블을 가지고, 지금 내가 뭘 하려는지 지불 결과가 상단에 표시됩니다 있도록 그것을 만드는 것입니다.mysql 쿼리는

그래서 난 지방 페이지에이고 지방의 ID가, 내가 가지고있는 목록을 만들 필요가 23라고 upgrade_province = '예'와 upgrade_status이 = '지불'과 = '23 '주문 최초의 결과로 표시 날짜순으로 정렬 된 것보다 그 이하의 모든 것. upgrade_province = '예'이고 upgrade_status = '미납'인 경우 해당 목록을 일반 업체 정보로 표시해야합니다.

을 heres 테이블 구조 :

`id` int(11) NOT NULL auto_increment, 
`id_user` int(11) NOT NULL, 
`contact_email` varchar(255) NOT NULL, 
`price` varchar(255) NOT NULL, 
`title` varchar(255) NOT NULL, 
`title_slug` varchar(255) NOT NULL, 
`description` text NOT NULL, 
`id_province` int(11) NOT NULL, 
`id_city` int(11) NOT NULL, 
`map_address` varchar(255) NOT NULL, 
`id_type` int(11) NOT NULL, 
`id_contract` int(11) NOT NULL, 
`bedrooms` varchar(255) NOT NULL, 
`bathrooms` varchar(255) NOT NULL, 
`image_main` varchar(255) NOT NULL, 
`image_2` varchar(255) NOT NULL, 
`image_3` varchar(255) NOT NULL, 
`image_4` varchar(255) NOT NULL, 
`image_5` varchar(255) NOT NULL, 
`status` varchar(255) NOT NULL default 'Active', 
`upgrade_urgent` varchar(255) NOT NULL default 'no', 
`upgrade_city` varchar(255) NOT NULL default 'no', 
`upgrade_province` varchar(255) NOT NULL default 'no', 
`upgrade_price` varchar(255) NOT NULL, 
`upgrade_status` varchar(255) NOT NULL default 'unpaid', 
`num_views` int(11) NOT NULL default '0', 
`num_replies` int(11) NOT NULL default '0', 
`date_posted` int(11) NOT NULL, 
`date_upgrade` int(11) NOT NULL default '0', 
`mod_status` varchar(255) NOT NULL default 'approved', 

는 내가 자신의 upgrade_province = '예'

답변

3

당신은 임의 사용할 수있는 경우에도 정상으로 무급 광고를 취급 할 수있는 방법을 알아낼 수 없습니다 ORDER BY 절의 표현식. 부울 참/거짓 값은 순서 것이다 평소와 같이 ASC/DESC로 주문하실 수 있습니다 '0'과 '1'정수는 점에서 TRUE로 평가 그래서

...rest of query... 
ORDER BY (upgrade_province='yes' and upgrade_status='paid' and id_province='23') DESC, 
    ... other order clauses ... 

모든 레코드로 처리 '와'얻을 것이다 '1'로 평가합니다. 주문한 경우 DESC가 결과에 처음으로 나타납니다. false로 나오는 것은 0으로 캐스트되고 더 낮은 값으로 정렬됩니다.

+0

+1 나 전에 마무리되었습니다. –

+0

정확히 내가 무엇을 찾고 있었는지. – scarhand

0

내가 원하는 결과를 얻었다면 Marc B가 제공 한 답변이 적절하지 않습니다. 여러 order by 절을 지정하면 첫 번째 등의 충돌시 두 번째 정렬이 발생합니다.

질문에 대한 나의 이해에는 다르게 분류해야 할 두 가지 별개의 세트가 있습니다.

또한 order by 절이 잘못되었습니다. 그는 그 것을 where 절의 일부로 만들고 세트가 식별 된 후 날짜순으로 정렬되기를 원합니다.

나는

select .. from table where (upgrade_province='yes' and upgrade_status='paid' and id_province='23') order by date desc 
union 
select .. from table where (upgrade_province!='yes' and upgrade_status!='paid' and id_province!='23') order by date desc 

참고하려고 제안 다음의 ands을해야 할 수도 있습니다 당신이 노조의 두 번째 부분을 부정하는 방식은 정확하게 당신이 원하는에 따라 ORS로 변경되었습니다.

두 가지 다른 세트를 독립적으로 선택하고 자체적으로 정렬하는 것이 중요합니다. 응용 프로그램 수준에서 여러 쿼리를 실행하고 원하는대로 응용 프로그램을 정렬하도록 비슷한 비슷한 작업을 수행 할 수도 있습니다.

관련 문제