2014-01-16 2 views
0

У меня есть следующая таблица в моей базе данных. Теперь я хочу получить все записи, которые начинаются от одного значения продукта до следующего значения продукта. Я имею в виду все записи, начиная с одного продукта 'до следующего значения продукта. Обновлено:Запрос Mysql для получения записей из диапазона записей

Item_Type всегда будет иметь два значения как для продукта, так и для правила. Поэтому нам нужно найти все записи, начиная с значения продукта и заканчивая последним значением правила.

id Item_Type  Product_ID 
1 product   512350  
2 rule    541 
3 rule    5431 
4 rule    5421 
5 rule    5431 
6 rule    5241 
7 product   5350 
8 rule    5541 
9 rule    5341 
10 rule    5421 
11 rule    5141 
12 rule    54411 
13 product   51250 
14 rule    541 
15 rule    541 
16 rule    541 
17 rule    541 
18 rule    541 
19 product   512350 
20 rule    541 
21 rule    541 

Пожалуйста, помогите мне, как это можно сделать в запросе mysql.

+1

Есть ли какой-либо заказ в этом списке записей? Как мы узнаем, какие записи «между» двумя конкретными продуктами? – Aioros

+0

Пожалуйста, покажите желаемый результат. В комментарии Aioros есть ли столбец автоинкремента, который вы не показываете, который предоставляет заказ? InnoDB? –

+0

, мы должны найти все записи между продуктом и последним правилом перед следующим продуктом. – user2826169

ответ

-1

Это основной SQL запрос на выборку:

SELECT * 
FROM $tableName 
ORDER BY $orderColumn 
LIMIT $firstRowNo, $rowsCount 

Где

  • $ TABLENAME это имя таблицы в БД
  • $ orderColumn это имя столбца, который вы хотите использовать (возможно Product_ID)
  • $ firstRowNo number
  • $ rowsВстроить, сколько строк вы хотите ant get.

Примеры: запрос, который будет загружать первые 3 продукты:

SELECT * 
FROM myTable 
ORDER BY Product_ID 
LIMIT 0, 3; 

Примеры: запрос, который будет загружать первый 5,6,7,8,9 и 10-й продукт:

SELECT * 
FROM myTable 
ORDER BY Product_ID 
LIMIT 5, 5; 

Когда вы используете ограничение всегда сортировать строку по выбранному столбцу, это поможет вам определить, как сортируются поля, и порядок будет всегда одинаковым, даже если вы измените механизм БД.

0

Например, если вы хотите начать с продуктом 5350, вы могли бы сделать что-то ужасное, как это:

SELECT * 
FROM thetable 
WHERE id > (SELECT id 
      FROM thetable 
      WHERE Product_ID = 5350) 
AND id < (SELECT MIN(id) 
      FROM thetable 
      WHERE Item_Type = product 
      AND id > (SELECT id FROM thetable WHERE Product_ID = 5350)) 

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

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