Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] pola unikatowe, indeksy, ograniczenie ilosci
Forum PHP.pl > Forum > Przedszkole
micsas
Dzień dobry wieczór.
Mam tabelę w bazie mySQL która zawiera pola: id, nick, data, godzina.
Chciałbym móc wprowadać maksyalnie x rekordów dla danych nick i data.
Czyli dla x=3, nick=michal i data=2010-01-16
Kod
id | nick    | data       | godzina
-----------------------------------
1  | michal  | 2010-01-16 | 16:30
2  | michal  | 2010-01-16 | 17:00
3  | xxxxxx  | 2010-01-16 | 17:30
4  | michal  | 2010-01-16 | 18:00
5  | aaaaa   | 2010-01-16 | 19:00
6  | xxxxxx  | 2010-01-16 | 20:30

Kombinacja nick=michal i data=2010-01-16 występuje tu 3 razy i chciałbym aby więcej juz takich rekordów być nie mogło.
Pomyślałem, że mógłbym mieć jeszcze jedną kolumnę np: "ilosc" która mogłaby zawierać wartość od 1 do x dla danej kombinacji (nick, data), czyli coś takiego.
Kod
id | nick    | data       | godzina | ilosc
-------------------------------------------
1  | michal  | 2010-01-16 | 16:30   | 1
2  | michal  | 2010-01-16 | 17:00   | 2
3  | xxxxxx  | 2010-01-16 | 17:30   | 1
4  | michal  | 2010-01-16 | 18:00   | 3
5  | aaaaa   | 2010-01-16 | 19:00   | 1
6  | xxxxxx  | 2010-01-16 | 20:30   | 2

I w tym momencie wystarczyło by zadbać o to aby kombinacja pól (nick, data, ilosc) była unikatowa.
Ale jak wywołać taką inkrementację w bazie danych i dodatkowo ograniczyć ją do x wystąpień? Czy to w ogóle możliwe?
neverever
a poco?

To nie możesz przed dodaniem nowego rekordu zliczyć sobie czy nie przekroczono limitu?
  1. SELECT COUNT(*) FROM tablica WHERE nick='jakisnick'
lukasamd
A nie lepiej przez dodaniem do bazy najpierw pobrać poprzez COUNT (ew. SELECT id z warunkiem i potem mysql_num_rows) informację o tym, ile ich jest i podjąć w PHP odpowiednie działanie w zależności od wyniku?
IMO na coś takiego nie ma żadnego sensu liczyć i trzymać w osobnym polu.

@neverever:
faster smile.gif
micsas
No jasne. Niepotrzebnie kombinowałem jak koń pod górę. Użyłem:
Kod
SELECT * FROM db WHERE nick='michal' AND data='2010-01-16'

i potem
Kod
mysql_affected_rows($con);

No chyba, że da się to zrobić lepiej?

I serdecznie dziękuję za pomoc, sam siedziałem nad tym problemem już kilka godzin a tu takie błyskawiczne rozwiązanie.
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.