Belze
11.12.2009, 11:57:19
Witam
Mam drobny problem - mam w bazie tabele "wyswietlajnews_wdziale", a w niej rekordy, o konstrkcji - "1,5,7,8,15,19" gdzie cyfry to numery działów. W konkretnym dziale wyswietlane sa newsy poprzez sprawdzenie czy ten news ma sie wyswietlac w tym dziale . Czy da się skonstruować zapytanie poprzez LIKE, czy dopiero po wyjeciu z bazy wyciagnac to w php?
Gdyby bylo to zrobione w sposób select * from baza where wyswietlajnews_wdziale LIKE '$iddzialu' , to w dziale powiedzmy 1 wyswietliloby sie rowniez gdyby w danym rekordzie bylyby wartosci np. 15,16 (bo "znalazłby" "1").
Niewiem czy to poprawnie wytłumaczyłem.
Szukałem odpowiedzi w necie ale bez rezultau ;/
z gory dzieki za pomoc
nospor
11.12.2009, 12:00:19
zacznijmy od tego ze masz źle skontruowaną baze.
zamiast pola o wartosci 1,5,7,8,15,19
powienienes miec tabele o strukturze:
idNews | idDzialu
przykladowe dane dla dzialu o id 1
1 | 1
1 | 5
1 | 7
1 | 8
1 | 15
1 | 19
Wyszukiwanie po takiej strukturze to juz normalne zapytania sql
zzeus
11.12.2009, 12:03:02
Odradzam taką konstrukcję, jeśli możesz to lepiej zrób osobną tabelę która będzie łączyć dział z newsami, coś w stylu
dzial_newsy
id_dzial, id_news
Przy pobieraniu danych użyj odpowiedniego joina i będziesz miał to co potrzeba bez używania LIKE które w tym przypadku będzie mało optymalne
Belze
11.12.2009, 12:08:13
chyba nie do końca przedstawiłem to jasno.
podczas edytowania - dodawania newsa w CMSie wybiera sie czy ma sie wyswietlic na str glownej, czy w dzialach i czy w jeszcze innym miejscu. jezeli w dzialach to pojawia sie spis dzialow i zaznacza sie dokladnie w ktorych. w bazie w kazdym newsie jest kolumna "wyswietlajnews_wdziale" i tam wpisywane sa id dzialow, przy ktorych ten news ma byc wyswietlany.
w konkretnym dziale chcialbym, aby przeanalizowal ta kolumne i sprawdzil czy w danym rekordzie wystepuje dokladnie to id dzialu
nospor
11.12.2009, 12:14:18
Cytat
chyba nie do końca przedstawiłem to jasno.
wyraziles sie bardzo jasno. I ja, wydaje mi sie, ze tez bardzo jasno ci napisalem ze masz złą strukture i najlepiej by bylo jakbyś zamienil na tę, co ci zaproponowałem
Belze
11.12.2009, 12:17:36
problem w tym, że klientka nagle zmienila swoja wizje tego co bedzie, w cholere poszla moja praca i teraz nie mam czasu na przekonstuowanie bazy. jest to mozliwie technicznie, czy zmiana konstrukcji to jedyne wyjscie?
nospor
11.12.2009, 12:20:27
Mozesz uzyc wyrazenia regularnego (RLIKE) by wyciągnac te id. Przy pomocy wyrazenia bedziesz mogl podac ze id musi sie konczyc przecinkiem lub byc ostatnim id w ciagu
phpion
11.12.2009, 12:26:20
W takim razie najprościej będzie jeśli przed i po
każdej liczbie będzie końcowy przecinek, czyli zamiast:
Kod
1,5,7,8,15,19
będziesz miał:
Kod
,1,5,7,8,15,19,
Wtedy tworząc warunek z LIKE nie dajesz:
LIKE '$iddzialu'
tylko:
LIKE '%,$iddzialu,%'
czyli otaczasz identyfikator działu przecinkami (i zapomniałeś o %). Chyba to będzie najprostsze wyjście w tej sytuacji, aczkolwiek zdecydowanie lepiej byłoby przeprojektować bazę.
Belze
11.12.2009, 12:29:52
myślałem o tym - musi kończyć się przecinkiem, być poprzedzony przecinkiem i być ostatnim lub pierwszym w ciągu. jeżeli pierwszym i ostatnim, to przecinek przed albo po chyba że jest to jedyny element. ciezko to wyglada ;/ ktoś pomoże takie coś skonstruować?
phpion
11.12.2009, 12:32:53
Belze
11.12.2009, 12:37:27
@phpion - wiem, wrzucilem odpowiedz nie widzac Twojej wypowiedzi. tak zrobie - jest to wyjscie z tej sytuacji

dziękuję bardzo wszystkim!
piotrooo89
11.12.2009, 12:38:38
niemniej ten sposób pod względem optymalizacji jest kompletnym niewypałem, 0 tu jest optymalizacji....
Belze
11.12.2009, 12:45:12
niestety - poprzednio bylo tak, ze newsy byly oddzielne, dla dzialow (kazdy news mial przypisane w ktorym dziale sie wyswietla). nagle klientka zmienila decyzje - a czasu niestety nie, trzeba bylo cos na szybko zrobic.
piotrooo89
11.12.2009, 12:46:20
nie wiem czy to Ci potem popłaci, jak będziesz chciał jakoś grupować te dane to się zajedziesz.
Belze
11.12.2009, 12:53:28
zanim beda wrzucane dane, mam nadzieje ze przeforsuje troche czasu na przebudowanie bazy, zawsze mam niesmak jak jest to zrobione "na szybko", taka fuszerka - dzis jednak musi byc tak jak klient chcial - niestety ;/
piotrooo89
11.12.2009, 13:05:09
ja takie sprawy załatwiam mówiąc klientowi że dodatkowy dzień pozwoli zrobić coś lepszego.
Belze
11.12.2009, 13:31:49
gdyby to takie łatwe było, ale czas 2 dni, a poprawek na tydzień - nie ma możliwości przedłużenia. a klient jest pośrednikiem, wiec gucio go obchodzi, że coś nie będzie idealnie zrobione (kod, optymalizacja) etc.
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.