Black-Berry
1.05.2008, 17:14:17
Mam bazę danych z produktami (100 wpisów). Wśród nich chcę aby tylko wybrana ilość (np 4) były zaznaczone jako 'polecany'.
Można to oczywiście zrobić kilkoma zapytaniami. Ale czy jest może sposób na skrócenie procedury tak aby zaznaczenie wiersza jako 'polecany' opuszczało wcześniej podniesioną flagę na innym produkcie ?
W niektórych przypadkach chciałbym aby tylko jeden produkt miał podniesioną flagę 'reklamowany'. Może na jeden wpis są jakieś specjalne funkcje MySQL ?
Cezar708
1.05.2008, 17:16:14
SELECT *
FROM produkty WHERE plecamy=true
LIMIT 4
zauważ szczególnie to LIMIT
Pozdrawiam
Black-Berry
1.05.2008, 17:38:13
Sory, niejasno się wyraziłem. Mój błąd. Chodzi mi o ustawienie tylko 4 produktów a nie wybranie. Chce aby zawsze maksymalna ilość produktów zaznaczonych jako 'polecane' nie przekraczała 4.
Cezar708
1.05.2008, 17:50:21
a chcesz aby zabezpieczenie było ustawione na bazie (wyzwalacze) czy w kodzie PHP?
Jeśli pierwsza opcja musiałbyś podać jakiej bazy używasz
twój problem wynika z błędnych założeń w projekcie bazy. skoro potrzebujesz, żeby wybrana grupa produktów była wyróżniona, to nienajlepszym pomysłem jest dodawanie pól-flag typu 'polecany' 'reklamowany' (dla 99% danych będą puste ...).
sugeruję, żebyś założył dwie dodatkowe tabele, np. polecane_produkty i reklamowane_produkty, dowiązane kluczem obcym, np. id_produktu, do tabeli produkty. taka konstrukcja rozwiązuje twoje problemy z kontrolą ilości oflagowanych produktów. dużo prostsze są też operacje polegające na zmianie wyróżnionych produktów.
Black-Berry
1.05.2008, 18:21:53
Dodatkowe tabele komplikują za to inne rzeczy takie jak wyszukiwanie... musiałbym wtedy wykonywać zapytanie do 3 tabel. Poza tym zależy mi na uniwersalnym rozwiązaniu bo może okazać się że flag będzie więcej (np 5). Musiałbym wtedy Twożyć aż 6 tabel. Trzeba jednak przyznać, że sposób z dodatkowymi tabelami ma swoje zalety neistety w moim przypadku napewno się nie sprawdzi.
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.