![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 27.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
parę ładnych godzin borykam się z problemem, bardziej chodzi o kwestię SQL. Obrazując, skrypt po wpisaniu w textboxa wyszukuje w SQL dane rekordy, gdzie nazwa = wpisanna_wartosc. Zakładając, że wpisałem 2 nazwy oddzielając je przecinkiem (X, Y) Mianowicie 2 warunki: a) jeśli się wybierze opcję "wszystkie zawierające wpisane wartości" ma szukać wszystkich rekordów, w których występuje dana wyżej "nazwa". To działa: Wzór: Zawiera X; Zawiera Y; Zawiera Y i X; To działa jak należy. b ) jeśli się wybierze opcję "wszystkie zawierające TYLKO wprowadzone wartości ma szukać rekordów, w których występuje tylko w "nazwa" to, co wprowadziliśmy. Tutaj nie wiem, jak to zrobić. Wzór: Zawiera X i Y - tylko, nie chcę rekordów, które zawierają tylko X, tylko Y oraz ewentualnie jeśli w MySQL w "nazwa" jest 3 opcje (X, Y, Z). Nie wiem jak to jaśniej wytłumaczyć, reausumując: -------------------- Przykład: Mam 5 wartości w tabeli, gdzie nazwa to w różnych kombinacjach: 1)Nazwa1, Nazwa2, 2)Nazwa1, Nazwa8, 3)Nazwa1, Nazwa9, 4)Nazwa8, Nazwa3, 5)Nazwa4, Nazwa5, Używając wybranej opcji pierwszej, gdzie w polu textboxa wpisane będzie: "Nazwa1, Nazwa8" Wynikiem będzie: 1), 2),3),4), to jest prawidłowe. Używając opcji drugiej efektem powinno być TYLKO 2). Ten post edytował ossUter 27.01.2018, 19:57:28 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ale ty nie wiesz jakie zapytanie powinno pójść do bazy danych, czy jak takie zapytanie ułożyć ze zmiennych, które są w php?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 27.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Nie mogę skonstruować zapytania. Uwzględniając opcje a, to proste, jeśli chodzi o b, to ręce mi opadły.
Wiem, że jest to niezrozumiałe, może inaczej. Chcę pobrać rekordy uwzględnione w textboxie, tj: To pokazuje mi rekordy, gdzie nazwa należy do zbioru $wprowadzona wartość i zakładając, że wprowadziłem tam "wynik1, wynik2" pokażą mi się rekordy zawierające: wynik1 LUB wynik2 LUB wynik1 i wynik2 Teraz potrzebuję jakoś dojść do rozwiązania, gdy wpiszę w textboxie "wynik1, wynik2" rezultatem będzie: tylko rekordy zawierające wynik1 i wynik2, no i NIC PO ZA TYM. Może teraz trochę rozjaśniłem problem. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 27.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem o co chodzi, ale jak obserwuję te fora, to większość osób przychodzących z prośbą o pomoc, zostaje traktowana jak debile, nieważne.
Zapytanie się generuje prawidłowo, już sprawdziłem to wcześniej, dane z formularza są przekazywane. Moim problemem jest nieumiejętność, brak realnej wizji tego zapytania, po prostu nie potrafię go skonstruować. Operator IN() działa na zasadzie: IN('wartość', 'wartosc2', 'wartosc3'), czyli zapytanie będzie prawidłowe, jeśli znajdzie wartość lub wartosc2 lub wartosc i wartosc2 i wartosc3. Ja potrzebuję skonstruować zapytanie... a może bardziej warunek, w którym nie będzie spełniony jeśli będzie tylko wartosc, wartosc2 i wartosc3. Chciałbym, aby rekordy dla których warunek nie będzie spełniony, tj. będą pojedyncze wartosci nie będą uwzględniane, lecz całość - nie wykonywał się. Kombinowałem też coś na zasadzie , raz że nie pokazuje rekordów, warunek się nie spełnia. Używając operatora OR (lub) też nie spełnia moich oczekiwań, bo to szuka w tabeli jeśli jest przynajmniej 1 wartość znaleziona, to pokazuje, a moim celem jest jeśli wszystkie na raz wartości zostaną znalezione. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Czyli jak słusznie zauważyłeś potrzebujesz operatora and dla wszystkich wartości. Możesz to zrobić tak jak robisz albo iteratorami spl.
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Nie wiem o co chodzi, ale jak obserwuję te fora, to większość osób przychodzących z prośbą o pomoc, zostaje traktowana jak debile, Poprostu osoba, "ktora traktuje cie jak debila" sama nie ogarnia problemu. Ot i zagadka rozwiazanaCytat WHERE nazwa = 'przekazanawartosc1' AND nazwa = 'przekazanawartosc2' AND nazwa = 'przekazanawartosc3' AND nazwa = 'przekazanawartosc4' [PHP] pobierz, plaintext , raz że nie pokazuje rekordów, warunek się nie spełnia. A niby jakim cudem nazwa ma byc jednoczesnie rowna jednej wartosci i innej wartosci... Toz logiczne ze to NIGDY nie bedzie prawdziwe. Pokaz DOKLADNIE jak wyglada struktura bazy oraz DOKLADNIE jak wygladaja wartosci. Bo narazie widzialem tylko psedu schemat z pseudo wartosciami |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 27.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
Tutaj efekt, jaki chciałbym osiągnąć: przejdz
Tylko na chwilę obecną nie mogę używać FULL-TEXT ze względu na chociażby ograniczenia znakowe, jak i wersję MySQL. Nasuwa się pytanie - jak osiągnąć identyczny efekt, nie używając obecnej formy - FULL-TEXT? Po prostu chciałbym znaleźć jakąś inną alternatywę tego zapisu. Ten post edytował ossUter 29.01.2018, 21:15:40 |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Masz zla strukture bazy.
Nie mozesz w jednym polu trzymac wszystkich keywords dla danego topic. Kazdy keyword ma byc oddzielnym rekordem. Wowczas idzie normalnie operowac na takiej strukturze ps: oczywiscie tak jak teraz masz to mozna sie bawic tez, np tak: WHERE nazwa like '%przekazanawartosc1%' AND nazwa like '%przekazanawartosc2%' AND nazwa like '%przekazanawartosc3%' AND nazwa like '%przekazanawartosc4%' ale jest to malo eleganckie i pewnie srednio optymalne rozwiazanie |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 06:26 |