#mysql
#mysql
Вопрос:
У меня есть таблица под названием «маркеры», которая имеет такую структуру:
------ --------------- ----------- -------------
| id | about | time | type |
|------|---------------|-----------|-------------|
| 1 | text | 2 | restaurant |
|------|---------------|-----------|-------------|
| 2 | text | 1 | restaurant |
|------|---------------|-----------|-------------|
| 3 | text | 2 | museum |
|------|---------------|-----------|-------------|
| 4 | text | 2 | park |
------ --------------- ----------- -------------
Из этой таблицы я хочу выбрать комбинацию строк, чтобы сумма времени была меньше или равна определенному значению. Например, я хочу выбрать номер строки 1,3 и 4, потому что общее время меньше или равно 6.
Я думаю, что запрос должен звучать так: SELECT 'all rows' WHERE SUM(time) < 6
, но это работает не так просто.
Другой вопрос, который может возникнуть, заключается в том, что если я выбираю сумму, равную 3, в этом случае у меня есть несколько комбинаций (строка 1 со строкой 2, строка 2 со строкой 3 .. и так далее). Что я могу сделать, чтобы выбрать одно значение каждого типа?
Надеюсь, я все понял. Заранее спасибо!
SELECT id, time, type
FROM `markers`
WHERE type IN (
SELECT type FROM markers
WHERE (type = 'restaurant' OR type = 'museum' OR type = 'park')
GROUP BY type HAVING SUM(time_to_spend)< 20
)
Для 3 я ожидал бы чего-то подобного:
------ --------------- ----------- -------------
| id | about | time | type |
|------|---------------|-----------|-------------|
| 2 | text | 1 | restaurant |
|------|---------------|-----------|-------------|
| 3 | text | 2 | museum |
|------|---------------|-----------|-------------|
или любая другая комбинация.
Комментарии:
1. Можете ли вы опубликовать ожидаемый результат, скажем, для 3?
2. Похоже, вам нужно будет использовать некоторую рекурсию. Вот SQL-решение проблемы с рюкзаком, которое достаточно похоже на вашу проблему, чтобы вы могли его адаптировать aprogrammerwrites.eu/?p=560
3. Спасибо, я попробую предложенную вами ссылку и вернусь с дополнительной информацией. Что касается вывода для 3, для меня было бы лучше, если бы я мог видеть или выводить в другой таблице или где-то еще все возможные комбинации.