Вроде бы простое задание, но оно заставило задуматься о стандартных средствах, которые позволили бы сделать то, что мне надо. А именно у меня была большая табличка с множеством записей назовем её `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) |
К сожалению похожих по тематике статей пока нет.


0 Comments.