2012-01-31 3 views
0

) mysql 테이블에 엔티티 행이 저장되어 있습니다.사용자 정의 주문 (mysql

엔티티 테이블

order 
id 
name 
type (refers to Type(id)) 

다른 테이블에 저장된 유형의 행

유형 테이블 유형 테이블의 ORDER 열이 개체가 정렬되어야 주문 무엇에 의해 지정

id 
name 
order 

- 일부는 이름순으로 정렬해야하고 일부는 ID별로 정렬해야합니다.

내가 유형 테이블 예를 들어

에서 해당 엔티티 유형에 저장된 순서에 엔티티 테이블의 개체를 유형 테이블에서 ORDER BY 절을 얻고 정렬 MySQL의 쿼리를 만들려면 어떻게해야합니까, 우리를 보자

엔티티 테이블 :

행 1 :

id = 1 
name = Virginia 
type = 1 

행 2 :

나는 다음 행이 말한다 16,
id = 2 
name = Virginia 
type = 1 

행 3 :

id = 3 
name = Canada 
type = 2 

유형 (유형 테이블의 행)

1 행

id = 1 
name = states 
order = "name" 

행 2 :

id = 2 
name = countries 
order = id 

나는 내가 유형 테이블에 ORDER 행에 저장되어있는 내용에 따라 엔티티를 주문하려는 의해 순서대로 다음 쿼리

SELECT entities.id, entities.name FROM entities INNER JOIN type ON entities.type = type.id ORDER BY .... 

하고 싶어. 따라서 국가는 엔티티 (ID)별로 정렬되어야하며 상태는 엔티티 (이름)별로 정렬되어야합니다. 어떻게해야합니까?

답변

1

데이터베이스 디자인이 매우 좋지 않습니다.

CREATE TABLE countries (
    countryID INT NOT NULL, 
    countryName VARCHAR(30) 
); 

CREATE TABLE states (
    stateID INT NOT NULL, 
    countryID INT, 
    stateName VARCHAR(30) 
); 

그런 다음 같은 쿼리를 수행 할 수 있습니다 : 귀하의 예를 들어,이 더 비슷한 제안이 매우 적어도, 나는 더 확실한 이름을 사용하는 것이 좋습니다 것 에서

SELECT c.countryName, s.stateName 
FROM countries c LEFT JOIN states s ON c.countryID = s.countryID 
ORDER BY countryName, stateName; 

당신의 엔티티 테이블에서와 같이 유형 테이블의 'id'필드를 참조하는 'type'컬럼이 있습니다. 아마도 그것들을 typeID 또는 더 명백한 이름으로 지으십시오.

또한 주문할 열에 대한 정보를 저장하는 열을 만드는 것이 바람직하지 않다고 생각합니다. 즉, 매번 두 개의 쿼리를 실행해야하며 (하나는 주문을 가져오고 다른 하나는 실제 데이터를 가져 오는 것), 불필요하게 많은 추가 데이터를 저장하게됩니다.