Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]where `logi.notatka`='auth.notatka' OR `logi.notatka`='auth.notatka2', Czy da się coś takiego zrobić?
-Xort-
post 17.08.2008, 10:50:21
Post #1





Goście







Jak w temacie. Czy da się zrobić coś takiego żeby wybierało mi rekordy które spełniają warunek
  1. <?php
  2. `logi.notatka`='auth.notatka' OR `logi.notatka`='auth.notatka2'
  3. ?>
?
Oto moje zapytanie:
  1. <?php
  2. $wynik = mysql_query(("select * from logi,auth where (logi.notatka=auth.notatka OR logi.notatka=auth.notatka2 and logi.ip!=auth.i
    p_blok 
  3. and logi.ip!=auth.ip_blok2 and logi.numer!=auth.nr_blok and logi.numer!=auth.nr_
    blok2 and logi.login='$uzytkownik') ORDER BY id DESC"
    ) ) //
  4. or die('Wystąpił błąd przy wyświetlaniu wyników!');
  5. ?>
No i jak mam to OR to reszta się tak jakby nie wykonuje (np. to "logi.numer!=auth.nr_blok" nie działa a jak wywalę to OR to działa elegancko). Proszę o pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
-Xort-
post 17.08.2008, 11:28:40
Post #2





Goście







No i chodzi mi o to żeby wyświetlały się wyniki z notatką i notatką2 (a nie tylko z jedną z nich)
Go to the top of the page
+Quote Post
-Xort-
post 17.08.2008, 11:39:17
Post #3





Goście







Przepraszam że tak spamuję ale jeszcze jedno... Czy to moje "!=" jest poprawne? Chodziło mi tu o zastosowanie znaku różności (ip w logi = 1 a w auth blok_ip = 1 więc się nie wyświetli a jeśli blok_ip = 2 to się wyświetli)
Go to the top of the page
+Quote Post
SirZooro
post 17.08.2008, 13:20:28
Post #4





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Jeżeli baza akceptuje != to możesz je stosować, a jak nie to zmień to na <>.

W zapytaniu masz błąd wynikający z tego że operator AND ma wyższy priorytet niż OR (czyli będzie obliczony wcześniej). Musisz cały warunek zmienić żeby wyglądał w taki sposób:
  1. WHERE (... AND ... AND ...) OR (... AND ... AND ...)

Do pierwszego nawiasu musisz dać warunki dotyczące auth.notatka, a do drugiego - auth.notatka2.


--------------------
Go to the top of the page
+Quote Post
-Xort-
post 17.08.2008, 13:42:55
Post #5





Goście







To != działa wspaniale haha.gif.
Zrobiłem tak jak mówiłeś i moje zapytanie wygląda teraz tak:
  1. <?php
  2. $wynik = mysql_query("select * from logi,auth where (logi.login='$uzytkownik' and logi.notatka=auth.notatka and logi.numer!=auth.nr_blok and logi.numer!=auth
    .nr_blok2 and logi.ip!=auth.ip_blok and logi.ip!=auth.ip_blok2) or (logi.login='$uzytkownik' and logi.notatka=auth.notatka2 and logi.numer!=auth.nr_blok and logi.numer!=aut
    h.nr_blok2 and logi.ip!=auth.ip_blok and logi.ip!=auth.ip_blok2) ORDER BY id DESC"
    )
  3. ?>

Ale nie wyświetla żadnego wyniku (mimo tego że 1 spełnia pierwsze warunki i 1 spełnia drugie). Gdy usunę te nawiasy po "where" i drugie wszystko od "or" do "order" to działa ale wyświetla tylko wyniki z pierwszą notatką :/.
Go to the top of the page
+Quote Post
SirZooro
post 17.08.2008, 14:27:46
Post #6





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Na przyszłość zawijaj te linijki bo strasznie to się czyta smile.gif

Chodziło mi o taką modyfikację zapytania:
  1. SELECT * FROM logi,auth WHERE ((logi.notatka=auth.notatka AND logi.ip!=auth.ip_blok AND logi.numer!=auth.nr_blok) OR (logi.notatka=auth.notatka2 AND logi.ip!=auth.ip_blok2 AND logi.numer!=auth.nr_blok2)) AND logi.login='$uzytkownik' ORDER BY id DESC


--------------------
Go to the top of the page
+Quote Post
-Xort-
post 17.08.2008, 15:14:12
Post #7





Goście







Niestety nadal to samo :/ (nie wyświatla żadnego rekordu). A i tak musiałem Twoje zapytanie zmodyfikować bo mi chodzi o coś takiego:
  1. <?php
  2. select * from logi,auth where 
  3. ((logi.notatka=auth.notatka and logi.ip!=auth.ip_blok and logi.numer!=auth.nr_blok and logi.ip!=auth.ip_blok2 and logi.numer!=auth.nr_blok2) 
  4. OR 
  5. (logi.notatka=auth.notatka2 and logi.ip!=auth.ip_blok2 and logi.numer!=auth.nr_blok2 and logi.ip!=auth.ip_blok and logi.numer!=auth.nr_blok)) 
  6. and logi.login='$uzytkownik' ORDER BY id DESC
  7. ?>

@offtopic Tak mam zawijać? ; d
Go to the top of the page
+Quote Post
-Xort-
post 18.08.2008, 08:16:30
Post #8





Goście







Odświeżam O.o
Go to the top of the page
+Quote Post
SirZooro
post 18.08.2008, 10:59:03
Post #9





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Hmm, wygląda zatem że coś innego jest problemem. Spróbuj wyrzucać kolejne warunki z zapytania do momentu aż zacznie ono zwracać rekordy, i wtedy znajdziesz problematyczny warunek - albo on będzie zły/niepotrzebny, albo problem będzie z danymi.


--------------------
Go to the top of the page
+Quote Post
-Xort-
post 18.08.2008, 13:01:08
Post #10





Goście







Jeśli wywalę nawiasy i OR to wszystko działa tylko że uwzględnia jedną notatkę :/
Go to the top of the page
+Quote Post
-Xort-
post 18.08.2008, 16:19:54
Post #11





Goście







O.o Już rozwiązałem problem. Chodziło o to że pole z logi.~ nie może być porównywane do NULL (a taka była wartość jednego pola z tabeli auth)
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: 18.07.2025 - 02:37