2013-07-25 3 views
0

В основном у меня есть поисковый запрос, который успешно захватывает все необходимые мне результаты. Я также проверяю количество всех строк (за пределами последнего предела запросов), количество для отдельных идентификаторов категорий, и теперь мне просто нужно min/max, надеюсь, в том же запросе.MySQL min/max с объединенной таблицей

Проблема, которую я вижу, состоит в том, что она связана с объединенным запросом, поэтому мне нужно будет присоединиться, сопоставить каждый подключенный идентификатор, а затем проверить номер, который я хочу использовать min/max.

Итак, у меня есть 20 результатов, все с разными «ценами», но цены находятся в другой таблице, и я хочу найти самую низкую и самую высокую цену за этот другой стол. Мне нужен только один результат для min и max, поэтому я мог бы добавить его с моим запросом на подсчет (потому что он также должен обходить предельную часть основного запроса).

Любые мысли по этому поводу?

Вот некоторые дополнительные детали (основные запросы присоединиться)

$query->join('LEFT','#__mrsp AS m 
    ON (t.name = m.name AND m.mrsp = 
    (SELECT min(mrsp) FROM #__mrsp WHERE name = t.name))'); 

name в данном случае представляет собой уникальное числовое значение, поэтому он работает как идентификатор. Это также синтаксис базы данных joomla.

Я выбираю минимум в этом соединении, так как может быть несколько результатов для одного mrsp (несколько поставщиков), поэтому мне нужен только самый низкий для основного запроса. Чтобы немного расширить мой вопрос, «max» должен быть наивысшим возвращенным значением «min», но это менее важно.

EDIT:

Вот немного больше деталей.

В принципе каждый продукт позволяет сказать, что имеет 50 поставщиков, я хочу, минимальная цена на них все, чтобы довести его до 1.

Теперь, если есть 1300 продуктов после того, мин присоединиться должно быть 1300 цены, присоединенные в качестве ну, так что я хотел бы 1 колонку за минимальную найденную цену и одну за самую высокую найденную цену.

Это приведет к результату, показывающему самую низкую цену, которая будет иметь любой результат, а также самая высокая цена и результат во время вашего поиска.

Итак, если для каждого продукта имеется 50 поставщиков, таблица цен будет иметь 50 * 1300 строк. Мне нужно 1300 - 1300 строк, так что начальный минимум идеально подходит для этого.

Вот сборка текущего запроса:

SELECT 
    MAX(m.mrsp) max_price, 
    MIN(m.mrsp) min_price 
FROM #__products t 
LEFT JOIN #__mrsp m ON t.name = m.name 
WHERE IF(t.width IS NOT NULL, IF(t.w_override, t.j_width, t.width), t.j_width) = 17 
    AND (t.publish_up = '0000-00-00 00:00:00' OR t.publish_up <= '2013-07-25 20:14:22') 
    AND (t.publish_down = '0000-00-00 00:00:00' OR t.publish_down >= '2013-07-25 20:14:22')  
    AND t.state = 1 
ORDER BY t.id 
+0

И в чем проблема сейчас? –

+0

Возвращает min как max и max как min, или просто возвращает неправильное значение. В настоящее время пытается заглянуть в нее. –

+0

У вас есть запрос для многих ifs. Попробуйте сначала запросить только с помощью соединения и порядка. Посмотрите, дает ли он вам правильные результаты. Затем вы продолжаете добавлять условие один за другим и каждый раз тестируете его, какие результаты он приносит вам. –

ответ

2

Там Фор вы должны заказать по идентификатору продукта и выберите MAX (цена), MIN (Цена). Возможно, вам нужно сделать два отдельных запроса, если это не позволяет вам выбрать min и max в одном и том же sql-файле.

Для примера.

Выберите имя, Макс (цена, Min (цена) от продуктов присоединиться к клиента на customer_fk = customer_id порядка по product_id (или в случае PRODUCT_NAME)

Я надеюсь, что это помогает вам сейчас;)

+0

Min/max будет основываться на всех продуктах, а не на совпадениях на mrsp. Поэтому, если есть 1300 результатов, мне нужно будет найти самую высокую цену и самую низкую цену, основанную на всех 1300 результатах. –

+0

Вы хотите найти максимальную цену, сравнив каждый продукт с самим собой или вы хотите найти самую высокую цену на все товары? –

+0

Я обновил вопрос, чтобы перейти к чуть более подробной информации об этом, его всегда трудно объяснить вопрос, пока вы не увидите, что люди путают. Извините за любую путаницу. –

Смежные вопросы