Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie liczb z podanego zakresu.
Forum PHP.pl > Forum > Bazy danych > MySQL
f1x
Witam,
posiadam taki oto problem:

Mam tabele characters, która przechowuje postacie pewnej gry. Tabela ma mniej-więcej takie pola:

order,
account_id,
name

itd.

Każde konto może posiadać maksymalnie pięć postaci. Powiedzmy, że mam przykładowe dane typu:

Kod
order | account_id | name
1    |    f1x    |    test
2    |    f1x    |    test2
3    |    f1x    |    test3
4    |    f1x    |    test4
5    |    f1x    |    test5


I teraz powiedzmy, że usuwam drugi i trzeci rekord. Zostaje mi:
Kod
order | account_id | name
1    |    f1x    |    test
4    |    f1x    |    test4
5    |    f1x    |    test5


Teraz chciałbym dodać 1 rekord i tutaj zaczyna się mój problem. W jaki sposób skonstruować zapytanie, aby nowo dodany rekord w kolumnie Order miał pierwszą wolną liczbę całkowitą z przedziału liczbowego <1, 5>. Po dodaniu rekordu dane miałyby wyglądać tak:

Kod
order | account_id | name
1    |    f1x    |    test
2    |    f1x    |    NOWY
4    |    f1x    |    test4
5    |    f1x    |    test5


Jedyne, co przychodzi mi do głowy, to stworzyć procedurę składowaną, która będzie pobierała SELECT COUNT(*) FROM characters WHERE account_id = f1x AND order = 1 - i tak dalej, aż do order równego 5, i gdzie COUNT == 0, to zwrócić order. Ale jest to raczej niewydajne winksmiley.jpg. Niestety nie znam się kompletnie na zaawansowanym MySQL. Bardzo proszę i z góry dziękuje za pomoc!
Mchl
Ja bym kombinował tak:
Kod
CREATE TEMPORARY TABLE temp_orderNos (
  order TINYINT
) ENGINE = MEMORY;

INSERT INTO temp_orderNos VALUES (1),(2),(3),(4),(5);

SELECT
  t.order
FROM
  temp_orderNos AS t
LEFT JOIN
  characters AS c  
ON
  c.order = t.order
WHERE
  c.account_id = ?
  AND c.order IS NULL
ORDER  BY
  t.order ASC
LIMIT 1;

DROP TEMPORARY TABLE temp_orderNos;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.