2012-09-29 4 views
-2

4The 코드가 작동하지 않습니다 ..PHP MySQL의 ORDER BY는

$userstuff = mysql_query("SELECT * FROM users WHERE username='$session->username' "); 

while($userinfo = mysql_fetch_array($userstuff)) { 
    foreach (explode(', ',$userinfo['myapps']) as $id){ 
     $appstuff = mysql_query("SELECT * FROM apps where id='$id' ORDER BY id DESC"); 
     while($app = mysql_fetch_array($appstuff)) 

가 작동하지 않습니다 .. 당신은 바로 그 필드에 의해 주문 전에 평등 테스트를 통해 결과를 필터링 할

+6

하거나, 질문을하게 될 것이다되지 않는다 "작동하지 않습니다"와 여기, 또는 다양한 실제 상황에서 자신을 발견 할 수도 있습니다 (또는 이미 자신을 찾았습니다). 어쨌든 하나의 항목으로 목록을 주문할 수는 없습니다 ... – siride

답변

1

당신은 테스트합니다 ... 즉 : 모든 결과는 id 필드에 정확히 동일한 값 (where id='$id')을 가지므로 id을 기준으로 정렬해도 눈이 먼 것은 아닙니다.

1

먼저 앱 목록을 개별적으로 추출한 다음 한 번에 하나씩 선택하십시오 (user 테이블에 저장된 순서대로).

예를 들어 사용자의 myapp 목록이 1,5,3 인 경우 해당 순서대로 앱이 선택됩니다. 의 myapps 목록을 쉼표로 구분이 보장되지 않는 경우 :

수정 될 것이라고는 이런 일이 (항상 myapps 필드를 가정 정수의 쉼표로 구분 된 목록으로 구성)

$userstuff = mysql_query("SELECT * FROM users WHERE username='$session->username' "); 
while($userinfo = mysql_fetch_array($userstuff)) { 
    $appids = $userinfo['myapps']; 
    $appstuff = mysql_query("SELECT * FROM apps where id in ($appids) ORDER BY id DESC"); 
    while($app = mysql_fetch_array($appstuff)) 

입니다 (즉, 사용자가 입력 한 데이터, 필터링되지 않은 데이터)를 삭제하려면 쿼리에서 사용하기 전에 데이터를 먼저 정리해야합니다.

다른 방법으로, 다음 다음 (PHP와) 그들에게를 정렬 그들이 좋아하는 쿼리를 추출 할 수있는 것은 다음과 같습니다

$userstuff = mysql_query("SELECT * FROM users WHERE username='$session->username' "); 
while($userinfo = mysql_fetch_array($userstuff)) { 
    $appids = explode(",",$userinfo['myapps'])); 
    $sortedappids = sort($appids,SORT_NUMERIC); 

    foreach ($sortedappids as $id){ 
     $appstuff = mysql_query("SELECT * FROM apps where id='$id' ORDER BY id DESC"); 
     while($app = mysql_fetch_array($appstuff)) 
+0

데이터베이스 열에 쉼표로 구분 된 ID 목록이 정말 나쁜 생각인데, 이유 중 하나를 설명합니다. – siride

+0

@ 사이 이드, 완전히 동의했다. 그것은 절대적으로 그것 자신의 테이블'user_app' 테이블로 분할되고, 합쳐지고, 정렬되어야하며, 이것 모두는 단순화됩니다. – chops