Получить записи с уникальным значением параметра без подзапроса



Вроде бы простое задание, но оно заставило задуматься о стандартных средствах, которые позволили бы сделать то, что мне надо. А именно у меня была большая табличка с множеством записей назовем её `items`. В ней информация о конкретных `item`, которые привязаны к другой таблице по средствам поля `pid`.

Задача: Получить нужные мне `item` по условиям в WHERE и ограничить выдачу только по одному значению `pid` (для экономии памяти и увеличения скорости работы, т.к. не хочется после обрабатывать результат запроса).

Дано:

+------------------+
|id   name     pid |
|------------------|
|1    item1    1   |
|2    item2    2   |
|3    item3    3   |
|4    item4    1   |
+------------------+

Нужно получить (будьте внимательны, это зависит от ORDER BY):

+------------------+
|id   name     pid |
|------------------|
|1    item1    1   |
|4    item4    1   |
+------------------+

Решил задачу сам средствами внутренних переменных. Это решение делает все что нужно и без дополнительного подзапроса в таблицу (или отдельного запроса для расчета подходящего `pid`).

1
2
3
4
5
6
7
SELECT
    *,
    @lastId:=`pid`
FROM
    `items`
WHERE
    IF (@lastId > 0, `pid` = @lastId, 1)

К сожалению похожих по тематике статей пока нет.

Ответить


[ Ctrl + Enter ]