2011-01-20 6 views
1

MySQL은 :MySQL이 순서별로, 경우 항목 먼저 다른 테이블에 포함되어 있는지 확인

+--------+-------+ 
| itemid | title | 
+--------+-------+ 
| 1 | title | 
+--------+-------+ 

표 2

+----+--------+------------+ 
| id | itemid | time | 
+----+--------+------------+ 
| 1 | 1 | 1295116368 | 
+----+--------+------------+ 
| 1 | 2 | 1295548368 | 
+----+--------+------------+ 
| 2 | 1 | 1294079568 | 
+----+--------+------------+ 

PHP :

$a = mysql_query("SELECT `itemid` FROM `table2` WHERE `id` = '1' ORDER BY `time` DESC") 
while($b = mysql_fetch_assoc($a)) 
{ 
    echo $b['itemid'].'<br />'; 
} 

출력 :

2 
1 
그것이 때 처음 표시 싶어서, 위의도 에 상품 ID도 포함되어 있는지 여부를 확인하는 것입니다 쿼리에서 수행 할 작업을하지만

, , 그것은 오래된 게시물일지도 모르겠다는 사실에도 불구하고.

나는 이것이 의미가 있기를 바랍니다.

그래서, 출력은 같아야

1 
2 

항목 ID를 또한 표 1에 포함되어 있기 때문에 = 1.

+1

동일한 ID를 사용하는 것은 피해야합니다. 유일하게 식별 할 수없는 식별자를 갖는 것은 비논리적입니다. 합리적으로, id가 기본 키가 될 것으로 기대하는 ORM을 사용하려고하면 중복 된 키가 있기 때문에 파열됩니다. Sam Dufel이 당신의 질문에 대한 올바른 생각을 가지고 있다고 생각합니다. – coreyward

답변

3

나는 당신이 테이블을 조인 할 수 및 종류

SELECT itemid FROM table2 
LEFT JOIN table1 USING (itemid) 
WHERE id = '1' ORDER BY title DESC, time DESC 

당신은 NULL 값이 시작 부분에 분류되어있는 경우, 내가 기억하지 않는 제목에 정렬을 반전 할 수 있습니다 제목 또는한다고 생각 종료.

1

사용 :

SELECT `itemid` FROM `table2` t2 LEFT JOIN `table1` t1 
ON t2.itemid = t1.itemid WHERE t2.`id` = '1' ORDER BY t1.itemid, t2.`time` DESC 
+0

@ Eric : 좋은 지적. 감사합니다 – Sarfraz

1

당신은 왼쪽과 표에 조인 및 표 2의 시간으로 표 1의 ITEM_ID 다음으로 먼저 주문할 수 있습니다

 
    SELECT t2.item_id 
    FROM table2 t2 LEFT JOIN table1 t1 ON t1.item_id = t2.item_id 
    WHERE t2.id = 1 
    ORDER BY IFNULL(t1.item_id, 'a') ASC, t2.time DESC 

참고 : 나는 IFNULL를 사용 order by 절에서 NULL 값을 마지막으로 정렬하게합니다.

+1

+1 IFNULL이 중요하다고 생각합니다. 그렇지 않으면 결과 집합은 OP가 원하는대로 정렬되지 않습니다. – horatio

관련 문제