Υπάρχει πίνακας (έστω my_table) που έχει column με unique index (έστω id1) αλλά όχι auto_increment, οπότε οι τιμές του id1 μπορεί να είναι οποιοσδήποτε integer (μοναδικές, βέβαια).
Θέλω να μπορώ να βρω το επόμενο ελεύθερο id, ξεκινώντας από κάποιο σαν βάση (starting point), είτε προς τα πάνω είτε προς τα κάτω.
Παράδειγμα:
Έστω ότι ο id1 έχει τις τιμές 5, 6, 7, 8, 13, 14, 15, 45, 78.
Αν θέλω να βρω τον επόμενο ελεύθερο αριθμό ξεκινώντας από 6, θα πρέπει να φέρει το 9.
Αν θέλω να βρω τον επόμενο ελεύθερο αριθμό ξεκινώντας από 11, θα πρέπει να φέρει το 11.
Αν θέλω να βρω τον επόμενο ελεύθερο αριθμό ξεκινώντας από 123, θα πρέπει να φέρει το 123.
Αν θέλω να βρω τον προηγούμενο ελεύθερο αριθμό ξεκινώντας από 15, θα πρέπει να φέρει το 9.
Αν θέλω να βρω τον προηγούμενο ελεύθερο αριθμό ξεκινώντας από 8, θα πρέπει να φέρει το 4.
κ.ο.κ...
Προσπάθησα με το παρακάτω:
Κώδικας: Επιλογή όλων
SELECT t1.`id1` + 1
FROM `my_table` t1
LEFT JOIN `my_table` t2 ON t1.`id1` + 1 = t2.`id1`
WHERE t2.`id1` IS NULL
ORDER BY t1.`id1` ASC
LIMIT 1
Έχω δοκιμάσει και κάποιες παραλλαγές με MIN(id1) κλπ αντί για LIMIT 1, αλλά το αποτέλεσμα είναι το ίδιο.
Υπάρχει βέβαια λύση με ορισμό μεταβλητής όπως πχ εδώ:
Κώδικας: Επιλογή όλων
SET @var=1;
SELECT IF(@var=`id1`,@var:=`id1`+1,@var) FROM `my_table` ORDER BY `id1`;
SELECT @var;
Μπορεί κανείς να βοηθήσει; Θενκς εκ των προτέρων...