2010-02-07 3 views
1

왜 이걸 알아낼 수 없습니까? 기본적으로, 나는 many-to-many 관계를 가진 두 개의 테이블을 가지고있어서 그 사이에 접합 테이블을 가지고있다. Zend_db 접합 테이블에 쿼리를 결합하십시오.

Restaurant (id, restaurant_name, suburb) 

RestaurantCuisine (restaurant_id, cuisine_id) 

Cuisine (id, cuisine_name) 

그래서, 많은 레스토랑이 많은 요리를 할 수 있습니다 : 예를 들어

다음 데이터베이스 스키마를 고려하십시오.

내가 작성하려고하는 쿼리는 교외에있는 모든 요리를 반환합니다. SQL 예제는 다음과 같습니다 :

SELECT cuisine_name 
FROM CuisineRestaurant 
JOIN Cuisine ON Cuisine.id = CuisineRestaurant.cuisine_id 
JOIN Restaurant ON Restaurant.id = CuisineRestaurant.restaurant_id 
WHERE suburb LIKE '%x%'; 

이것은 나에게 맞는 것 같습니다.

어떻게 이것을 Zend_Db를 사용하여 구현합니까?

$select = Zend_Db_Table::getDefaultAdapter()->select(); 

$select->from('RestaurantCuisine', 'cuisine_name') 
    ->join('Cuisine', 'Cuisine.id = RestaurantCuisine.cuisine_id', array()) 
    ->join('Restaurant', 'Restaurant.id = RestaurantCuisine.restaurant_id', array()) 
    ->where('suburb LIKE ?', '%x%'); 

결과 :

+0

지금까지 어떤 시도를 했습니까? – Gordon

+0

안녕하세요 고든, 많은 시행 착오 끝에 나는 이것을 생각해 냈습니다. 올바른 데이터를 반환하지만 매우 느리게 실행되는 것으로 보입니다. $ select = $ this-> select() -> setIntegrityCheck (false) -> distinct() -> from ('CuisineRestaurant', array()) -> join ('Restaurant', 'Restaurant.id = CuisineRestaurant.restaurant_id',> 'join'('Cuisine', 'CuisineRestaurant.cuisine_id', 배열 ('id', 'cuisine' array()) -> 여기서 ('Restaurant.suburb =?', $ 시외) -> 주문 ('Cuisine.cuisine'); –

답변

3

다음은 Zend_Db_Select 쿼리 버전입니다.

SELECT "RestaurantCuisine" "RestaurantCuisine"
INNER FROM "cuisine_name"
요리 "요리"를 가입하세요. id = RestaurantCuisine.cuisine_id
INNER JOIN "Restaurant"ON Restaurant.id = RestaurantCuisine.restaurant_id
WHERE (교외 LIKE '% x %')

쿼리가 느리게 실행된다고하셨습니다. 기본 키와 색인이 올바르게 구성 되었습니까?

+0

그 루이즈에 진심으로 감사드립니다. 나는 곧 이것을 시도 할 것이다. 검색 가능한 모든 필드에 인덱스가 있습니다. –

+0

솔루션이 효과적이었습니다. 느린 쿼리는 내가 개발하고 있던 서버 때문이었습니다. 나는 새로운 서버로 옮겼으며 엄청나게 빠릅니다. 루이즈에게 감사드립니다. –

+0

내가 도울 수있어서 기쁩니다. :) –

0

같은 문제가 발생했습니다.이 같은 쿼리는 매우 느리게 실행되며, 문제는 zend가 어떻게 만들어 졌는지와 같습니다.

$ select = Zend_Db_Table :: getDefaultAdapter() -> select();

 $select = Zend_Db_Table::getDefaultAdapter()->select(); 

$select->from('RestaurantCuisine', 'cuisine_name') 
->join('Cuisine', 'Cuisine.id = RestaurantCuisine.cuisine_id', array()) 
->join('Restaurant', 'Restaurant.id = RestaurantCuisine.restaurant_id', array()) 
->where('suburb LIKE ?', '%x%'); 
관련 문제