2014-12-18 2 views
1

Я уже искал, но всегда нахожу МЕНЬШЕ и БОЛЬШЕ в качестве подсказок. Я хочу иметь следующее восходящее число в строке, которая не используется. Как следующее:Самая низкая бесплатная стоимость в колонке mysql

entries 
1 
2 
3 
5 
6 
7 

Если каждое из чисел для одной строки в моей таблице я хочу номер 4 в результате и в следующем примере:

1 
2 
3 
4 
5 
6 

Я хочу, чтобы число 7 как результат. Есть ли возможность выполнить это в инструкции SQL?

Беста, Робин

+0

Представьте, что у вас есть предметы, которые вы продаете, и каждый элемент получает номер. Первое, что вы продаете, получает номер 1, а второе - номер 2. Теперь кто-то покупает номер 3, и теперь номер возвращается. По причинам теперь номер 2 снова свободен и его нужно продать тоже. Это немного сложно, но в этом случае мне это нужно. Конечно, я мог бы также использовать php для этого, но я подумал, что может быть и решение в mysql. – shroomlife

+0

Но кого это волнует, если это номер 4 или номер 7? Кто заботится, есть ли пробелы? И что, если нет. 1 отсутствует? Этот вопрос обычно указывает на глубокое непонимание важности целостности данных. – Strawberry

+1

Вам не нужно использовать базу данных для этой задачи –

ответ

3

Этот запрос предполагает, что число 1 в вашей таблице

select min(number) + 1 from entries e1 
where not exists (
    select 1 from entries e2 
    where e2.number = e1.number + 1 
) 

Если вы хотите, чтобы все недостающие номера (где пробелы не имеют не больше чем 1), а затем удалить min()

+2

«Если вам нужны все отсутствующие номера [где пробелы не превышают 1] ...» – Strawberry

+0

@Strawberry спасибо, обновленный ответ – FuzzyTree

+0

, я полагаю, вы могли видеть это таким образом ;-) – Strawberry

0

Это думает, что решение сделать автообъединение к следующему значению, и извлечь первый низкий результат. Пример:

Таблица: values с колонной value

SELECT v1.value 
FROM values v1 
LEFT JOIN values v2 ON v1.value = (v2.value + 1) 
WHERE v2.value IS NULL 
ORDER BY v1.value ASC 
LIMIT 1 
Смежные вопросы