Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]where `logi.notatka`='auth.notatka' OR `logi.notatka`='auth.notatka2'
Forum PHP.pl > Forum > Przedszkole
Xort
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
Xort
No i chodzi mi o to żeby wyświetlały się wyniki z notatką i notatką2 (a nie tylko z jedną z nich)
Xort
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)
SirZooro
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.
Xort
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ą :/.
SirZooro
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
Xort
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
Xort
Odświeżam O.o
SirZooro
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.
Xort
Jeśli wywalę nawiasy i OR to wszystko działa tylko że uwzględnia jedną notatkę :/
Xort
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)
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.