Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytaniem, LIKE ale z warunkiem
Belze
post 11.12.2009, 11:57:19
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 11.12.2009, 12:00:19
Post #2





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
zzeus
post 11.12.2009, 12:03:02
Post #3





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:08:13
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 11.12.2009, 12:14:18
Post #5





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:17:36
Post #6





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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?

Go to the top of the page
+Quote Post
nospor
post 11.12.2009, 12:20:27
Post #7





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post 11.12.2009, 12:26:20
Post #8





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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:
  1. LIKE '$iddzialu'

tylko:
  1. 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ę.
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:29:52
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
phpion
post 11.12.2009, 12:32:53
Post #10





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. echo ','.implode(',', array(1, 5, 7, 8, 15, 19)).',';
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:37:27
Post #11





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


@phpion - wiem, wrzucilem odpowiedz nie widzac Twojej wypowiedzi. tak zrobie - jest to wyjscie z tej sytuacji smile.gif

dziękuję bardzo wszystkim!
Go to the top of the page
+Quote Post
piotrooo89
post 11.12.2009, 12:38:38
Post #12


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




niemniej ten sposób pod względem optymalizacji jest kompletnym niewypałem, 0 tu jest optymalizacji....


--------------------
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:45:12
Post #13





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
piotrooo89
post 11.12.2009, 12:46:20
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie wiem czy to Ci potem popłaci, jak będziesz chciał jakoś grupować te dane to się zajedziesz.


--------------------
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 12:53:28
Post #15





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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 ;/
Go to the top of the page
+Quote Post
piotrooo89
post 11.12.2009, 13:05:09
Post #16


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ja takie sprawy załatwiam mówiąc klientowi że dodatkowy dzień pozwoli zrobić coś lepszego.


--------------------
Go to the top of the page
+Quote Post
Belze
post 11.12.2009, 13:31:49
Post #17





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2024 - 03:05