Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Wyciaganie rekordow z bazy gdzie w komorce znajduje sie zmienna z tablicy(array)
Forum PHP.pl > Forum > Przedszkole
neo1986kk
chodzi o to ze mam tableke

id zmienne
1 1,2,3,4,5
2 2,4,6,8
3 3,6,9


i powiedzmy chce pobrać rekrody dla zmiennej 6, czyli będą to te o id 2 i 3.

i wlasnie nie wiem jak to rozbić


  1. $zmienna = 6

  1. SELECT * FROM tabela WHERE zmienne LIKE %,$zmienna%


czy ja dobrze kombinuje?
piotrooo89
możesz też za pomocą regexp'ow http://dev.mysql.com/doc/refman/5.1/en/regexp.html. ale musisz wiać uwagę że zmienna może mieć postać 66 wiec musisz to jakoś ograniczyć (przecinki).
NEO.pl
Cytat(neo1986kk @ 25.03.2011, 13:40:43 ) *
czy ja dobrze kombinuje?


Kombinujesz dobrze, ale baze masz zaprojektowana zle. Dlaczego nie dodasz kazdej wartosci jako oddzielny rekord?
neo1986kk
dlatego ze nie chcę aby powtarzaly mi się rekordy w bazie to ma być system powiadomień...


dokladnie to

ID | POWIADOMIENIE | KOGO POWIADAMIAC
piotrooo89
może powiedz dokładnie co chcesz zrobić, bo to nie zmienia faktu, że masz słabo baze zaprojektowaną.
NEO.pl
Cytat(neo1986kk @ 25.03.2011, 14:04:10 ) *
dlatego ze nie chcę aby powtarzaly mi się rekordy w bazie to ma być system powiadomień...


dokladnie to

ID | POWIADOMIENIE | KOGO POWIADAMIAC


a w ktorym momencie niby beda Ci sie powtarzaly?
neo1986kk
powiadomienia np o tym ze ktos dodal zdjęcie.

id powiadomienie kogopowiadamiac


1. sprawdzam id znajomych uzytkownika

a) zbieram wszystkich znajomych i ukladam ich ID po przecinku
cool.gif $powiadamiaj = 1,2,3,4,5


2. $powiadomienie = twoj znajomy xxx dodal zdjecie.
3. zapisuje do bazy powiadomienie

  1. INSERT INTO tabela (`id`,`powiadomienie`, `kogopowiadamiac`,`ktododal`) VALUES ('','$powiadomienie','$powiadamiaj','$mojeid')
piotrooo89
no to przyda Ci sie tabela symulująca log zdarzeń. wpisujesz do niej akcje jakie zachodzą. czyli ID = 1 powiadomo ID = 2, 3 , 5.

ID | POWIADOM
1 | 2
1 | 3
1 | 5

można zrobić dodatkową kolumnę w której będzie informacja czy takowe powiadomienie zostało odebrane ale to już inna sprawa.
neo1986kk
to nie lepiej to wrzucić tak jak ja to zrobiłem tylko zrobić nową tabelę? nie pytam bo się wymądrzam tylko dlatego, że chciałbym, aby to było jak najbardziej optymalne, a napewno Ty znasz się na tym lepiej ode mnie.
piotrooo89
jak odpowiednio nadasz indeksy na kolumny to będzie to dużo bardziej wydajne niż szukanie tego za pomocą LIKE.
neo1986kk
aha, to wlasnie chcialem uslyszec, dzieki:)
vermis
Cytat
to nie lepiej to wrzucić tak jak ja to zrobiłem tylko zrobić nową tabelę? nie pytam bo się wymądrzam tylko dlatego, że chciałbym, aby to było jak najbardziej optymalne, a napewno Ty znasz się na tym lepiej ode mnie.

Z punktu widzenia łatwości obsługi Twoje rozwiązanie jest bardzo nieoptymalne, bo trudno dodać i pobrać listę powiadamianych (powód założenia tematu). Rozwiązanie z dodatkową tabelą jest znacznie lepsze i daje możliwość rozbudowy o dodatkowe opcje, a zapis do stringa pozbawia cię możliwości rozbudowy aplikacji, bez zmiany struktury bazy danych.
neo1986kk
no dobra a jeszcze jedno pytanie,

czy lepiej jest zrobic tabele

id, powiadomienie
1 uzytkownik dodal zdjecie

i potem wyciagnac z tabeli powiadamianych id i :

  1.  
  2. $select=mysql_query("select powiadomienie from table where id='1'");
  3. while($row=mysql_fetch_array($select)
  4. {
  5. echo $row[0];
  6. }


czy lepiej w tabeli zpisać w INT typ powiadomienia

id , typ
1 1

  1.  
  2. $select=mysql_query("select typ from table where id='1'");
  3. $row=mysql_fetch_array($select);
  4. $typ=$row[0];
  5.  
  6. switch($typ)
  7. {
  8. case 1:
  9. $powiadomienie='uzytkownik dodal zdjecie';
  10. break;
  11. }



czy moze jeszcze 3 tablicę gdzie będę trzymał w stringach opisy do typów powiadomień?
vermis
Ja rozbudowałbym na tabelę o zdarzenia, dla których wysyłać powiadomienia (true|false) czyli np.
id_uzytkownika|id_powiadamianego|zdjecie|komentarz|nowy wpis itp
1|2|true|false|true

Ale może okazać się że dodatkowa tabla da więcej możliwości, tutaj pytanie jak bardzo chcesz to rozbudować?
piotrooo89
ja bym rozwiązał to tak:

t_powiadomienia

id_powiadomienia | opis
1 | opis1
2 | opis2

t_user_powiadomienie
id_user_od | id_user_do | id_powiadomienia
1 | 3 | 2

zakładamy FK na t_user_powiadomienie(id_powiadomienia) => t_powiadomienia

i teraz mamy że user 1 powiadamia usera 3 o opis2.
neo1986kk
no właśnie sęk w tym że bardzo będzie około 20 różnych typów powiadomień
piotrooo89
dlatego ja zaproponowałem tabele słownikową t_powiadomienie, w niej załadujesz sobie 20 powiadomień i za pomocą ID będziesz sie odwoływał. taka konstrukcje będziesz mógł wykorzystać nie tylko w tym module, ale np innych miejscach w których będziesz musiał używać powiadomień, to zapewni Twojemu systemowi spójność.
neo1986kk
Cytat(piotrooo89 @ 25.03.2011, 15:59:15 ) *
zakładamy FK


tzn?

No tak tylko jest jeszcze jeden problem że te powiadomienia nie będą stałe dlatego że na przykład, ktoś tam dodał komentarz.


uzytkownik $zmienny dodał komentarz: $komentarz do zdjęcia użytkownika $zmienny2
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.