Запрос соединения таблицы соединений Zend_db - PullRequest
1 голос
/ 08 февраля 2010

Не уверен, почему я не могу понять это. По сути, у меня есть две таблицы с отношением «многие ко многим», поэтому между ними есть соединительная таблица.

В качестве примера рассмотрим следующую схему базы данных:

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?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Вот версия запроса Zend_Db_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%');

Результат:

ВЫБЕРИТЕ "RestaurantCuisine". "Имя_фотографии"
ОТ "RestaurantCuisine"
INNER JOIN "Кухня" ON Cuisine.id = РесторанCuisine.cuisine_id
INNER JOIN "Ресторан" ON Restaurant.id = RestaurantCuisine.restaurant_id
ГДЕ (пригород НРАВИТСЯ '% x%')

Вы сказали, что запрос выполняется медленно. Правильно ли настроены первичные ключи и индексы?

0 голосов
/ 25 октября 2013

У меня та же проблема, что запрос, как этот, выполняется очень медленно, и я думаю, что проблема в том, как это делает 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%');  
...