2012-05-01 7 views
0

짧은 이야기로 필드 별 내 주문이 MySQL 호출을 위해 작동하지 않는 것 같습니다. 정말"ORDER BY FIELD"MySQL이 작동하지 않는 것처럼 보입니다.

$의 theorder이

여기
, 'People-Wedding Photo', 'People-Kids', 'People-Male/Female', 'Architecture-Exterior', 'Architecture-Interior', 'Animal-Birds', 'Backgrounds' 

그리고 내 코드와 같이 올바르게 설정 ... 저장에 패턴을 찾을 수 없습니다. 보시다시피, 나는 변환을 통해 내 형식을 변환하고 있습니다 ....하지만 여전히 잘못된 순서를 ... 임의 순서 ...

누락 된 것이 있습니까?

$under_link_query = mysql_query("SELECT DISTINCT(type), type FROM ".$prefix."ProFolio_work WHERE type != 'Backgrounds' ORDER BY FIELD(type" . $theorder .")"); 


    while($u_row = mysql_fetch_assoc($under_link_query)){ 
     $type = html_entity_decode($u_row['type']); 

     $typeForm = preg_replace('/[^a-z0-9]/i', '_', $type); 
     ?> 
      <a href="#" id="link_<? echo str_replace(' ', '_', $typeForm); ?>"> 
    <? echo ucfirst($type); ?></a> 
      <? 
+0

$ theorder 변수는 무엇이며 올바르게 설정되어 있습니까? 나는 혼란 스럽다. 첫 번째 비트는 당신이 원하는 순서인가요? 왜 SELECT .... FROM ... ORDER BY와 같은 방식으로 DESC 또는 ASC를 입력할까요? – thatidiotguy

+0

올바른 구문 iirc는 기본적으로 삭제해야하는'ORDER BY $ fieldname'입니다. 또한 'ORDER BY'는 해당 필드를 기준으로 정렬되지만 db가 설정 한 우선 순위에 따라 정렬됩니다. 숫자 순서는 연관 순서보다 훨씬 더 예측 가능합니다. 내 권장 사항은 데이터를 가져 와서 그것을 사용하여 원하는 형식으로 PHP로 조작하는 것입니다. – Malovich

+2

결과를 표시 할 순서를 수동으로 지정할 수있는 "ORDER BY FIELD"로 알려져 있습니다. http://www.cfdan.com/posts/Handy_MySQL_-_ORDER_BY_FIELD.cfm – PaulHanak

답변

2

@Malovich 대답에, 기본적으로 사용해야 할 것입니다 :

ORDER BY $theorder 

을하지만 기본 순서는 오름차순입니다 것을 명심하고, 순서가 순차적으로 발생합니다. 나는 변수 $theorder이 쉼표로 시작하는 문자열로 설정되어 있음을 지적했다.

$theorder이 쉼표로 시작하지 않는지 확인한 다음 한 행만 주문하십시오. 그게 효과가 있다면 계속 추가하십시오.

=============== 편집 =================

죄송합니다, 당신이있는 용도하려는 필드를 정렬하십시오. 그 부분을 놓쳤으니 여기에 무슨 일이 일어나고있는 것입니까?

정렬 할 모든 필드를 제공해야합니다. 그렇지 않으면 MySQL은 먼저 제공하지 않은 필드 각각을 정렬 한 다음 제공 한 필드를 정렬합니다. 당신이 원하는 경우에 주문 필드의 하위 집합을 제공 할 수 있지만 다음 역순으로 제공 같은 DESC 표기법을 사용해야합니다 : 이것은 다음에 목록을 보여줍니다

ORDER BY FIELD (field,'lastsort',middlesort','firstsort') desc 

을 주문 :

firstsort items 
middlesort items 
lastsort items 
<all other options, in reverse alphabetical order> items 

이 부분의 핵심은 정렬을 위해 모든 필드 값을 추가해야한다는 것입니다. (또는 해결 방법을 사용하십시오).

+0

예, $ theorder는 쉼표로 시작하는 문자열입니다. 구문을 살펴보면, 필드를 사용하여 주문을 할 때 필드를 지정해야합니다. 즉, ORDER BY FIELD (유형, '필드 이름 1', '필드 이름 2') 등과 같습니다.하지만 당신은 "Order By 'Field Name 1', 'Field Name 2'"등등을 말하는 것으로 MANUAL 순서를 지정할 수 있다고 말하고 있습니다 ... 그것은 나에게 효과가있는 것처럼 보입니다 ... 구문 오류가 계속 발생합니다. – PaulHanak

+1

'ORDER BY FIELD'는 해당 필드 내의 값 순서 순서를 변경합니다. 간단한 예제는'id' 코드를 거꾸로 정렬하는 것입니다 :'ORDER BY FIELD (id, 'E', 'D', 'C', 'B', 'A')'. 정렬 기준으로 여러 필드를 지정하지 않습니다. –

+0

MySQL의 경우 다음과 같은 표가 주어진 다중 주문 열을 지원합니다. id | 이름 1 | 이름 2 | name3 ORDER BY id DESC, name1, name3, name2 은 id로 정렬합니다 (DESC (내림차순)로 인해 가장 큰 것부터 가장 낮은 것까지). 그런 다음 name1, name3, name2 순으로 정렬합니다. id가 고유 한 경우, 다음 3 열은 무시됩니다. 그러나 다음을 사용하여 정렬하는 경우 : ORDER BY name1 desc, name2 name1의 값이 복제 될 때마다 name2로 해당 데이터를 하위 정렬합니다. http://dev.mysql.com/doc/refman/5.0/ko/order-by-optimization.html – MaddHacker

관련 문제