2012-07-16 3 views
0

id = 9 인 특정 하위 범주 에 할당 된 프로필 이름을 가져 오려고합니다. 아래 코드를 실행하면 원하는 프로필이 표시되지만 foreach 루프의 ORDER BY 절이 알파벳순으로 해당 이름을 으로 정렬하지 않습니다. 대신 'subcategories'테이블의 'profiles'필드 (프로필의 ID는 쉼표로 구분됨) 안에 주문 된 것과 같은 방식으로 주문됩니다. 예를 들어 I '는, 5,1,2'프로파일 이름은 다음 순서 표시한다있다 [ '프로파일'] 하위의 경우 : ID와 ID = 5 MySQL의 order by 절이 foreach 루프 내에서 작동하지 않습니다.

  • 프로필

    1. 프로필 = ID 1
    2. 프로필 = I는 다음 '세부 항목' 테이블 안에 각 프로파일의 ID를 얻을하도록 분해() 함수를 사용하고 2

    은 ID가로부터 자신의 정보를 검색하는 것을 사용를 사용하는 '프로필'표foreach 루프 내부의 쿼리입니다.

    여기에 누락 된 자료가 있습니까? 당신의 도움을 주셔서 감사합니다. 당신이 $ 프로파일에 대한 귀하의 foreach 루프에서 새 SQL 쿼리와 모든 프로필을 검색하기 때문에 결과 이름으로 주문하지 않는 이유

    <?php 
    $subcategories=mysql_query("select * from subcategories where id='9'"); 
    
    while ($subcategories = mysql_fetch_array($subcategories)) 
    
    { 
    $profiles = $subcategories['profiles']; 
    $profiles = explode(',', $profiles); 
    
         foreach ($profiles as $p) 
         { 
         $all_places = mysql_query("select * from profile where id='$p' and active='1' order by name asc"); 
    
          while ($profile = mysql_fetch_array($all_places)) 
          { 
    
           echo $profile['name'];     
    
          } 
    
         } 
    
    } 
    ?> 
    
  • +0

    'ORDER BY' 절이 없으면 정상적으로 작동합니까 (제외 된 경우)? – Lion

    +0

    네, 정상적으로 작동합니다. –

    답변

    1

    잘하는 이유는 다음과 같습니다

    여기 내 코드입니다. 시나리오를 효과적으로 수행하면 각각 1 개의 프로필을 반환하는 3 개의 SQL 쿼리로 끝납니다. 따라서 "order by"절이 선언되면 각 쿼리 내에 이름순으로 정렬되며 각 쿼리에는 하나의 결과 만 포함됩니다.

    IN 문을 사용하면 효과가 있습니까? 예 :

    <?php 
    $subcategories=mysql_query("select * from subcategories where id='9'"); 
    
    while ($subcategories = mysql_fetch_array($subcategories)) 
    
    { 
    
    //i assume $subcategories['profiles'] are integers separated by comma as mentioned 
    $profiles = $subcategories['profiles']; 
    
           $all_places = mysql_query("select * from profile where id IN ($profiles) and active='1' order by name asc"); 
    
            while ($profile = mysql_fetch_array($all_places)) 
            { 
    
             echo $profile['name'];     
    
            } 
    
    } 
    ?> 
    
    +0

    나는 이것을하기위한 다른 방법을 알아 냈다. 하위 범주 테이블에서 프로필 ID를 선택하는 대신 하위 범주 ID가있는 모든 프로필을 선택하고 mysql 문에서 LIKE를 사용합니다. $ subcategories = '9'; $ subcategories1 = mysql_query ("select * from subcategory LIKE '% $ subcategories %'AND active = '1'order by name asc); 더 이상 필요하지 않은 내부 foreach와 while 루프를 제거했습니다. 고마워, 고마워. –

    +0

    작은 문제를 제외하고는 현재 잘 작동하는 것 같습니다. 하위 범주 ID가 9와 19 인 경우 위의 쿼리는 둘 다 반환합니다. 어떤 아이디어가 이것을 극복하는 방법? –

    +0

    문제가 해결되어 제안한 내용을 시도해 보았습니다. 문제를 일으키기 때문에 $ profiles 문자열에서 첫 번째 쉼표를 제거해야했습니다. 당신의 도움을 주셔서 감사합니다! –

    관련 문제