Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
uniejów
Witam.
Mam mały problem z poprawnym wyświetleniem rekordów. Nie wiem, być może chodzi o to, że jest tego "za dużo", ale po prostu jest tak, że nie chcę wyświetlać niektórych tytułów oraz "podtytułów", a reszta jak najbardziej ma się pojawiać.

W tabeli mam więc (m.in.) pola:
cat - kategoria; jest ich w sumie 5, ale chcę wyświetlać tylko z kategorii 2; tu mała uwaga - czasem pojawiają się (nie wiem czemu) rekordy z cat='1' a zapis w zapytaniu WHERE cat = '2' AND cat !='1' (...) nie działa...
title - tytuł arta
titlea - "podtytuł"


  1. $zap_e = "SELECT * FROM euro WHERE cat='2' AND status=0 AND title != 'Unie%' AND title != 'Mater%' AND title != 'Pozosta%' AND titlea != '%dopłat%' AND titlea LIKE 'Odc.%' OR titlea LIKE '%państw%' OR titlea LIKE '%flag%' OR titlea LIKE '%hymn%' ORDER BY RAND() LIMIT 5 ";

Co mam w tym zapytaniu źle, że wyświetla tak, jak nie powinno?
Bardzo proszę o pomoc.
nospor
1) Jeśli używasz % to masz używać LIKE/NOT LIKE a nie =/!=
2) Z OR oraz AND jest dokładnie tak samo jak w matematyce z + oraz *

2+2*3 da zupełnie inny wynik niż (2+2)*3

W zapytaniu również w zależności od tego co chcesz osiągnąć musisz używać nawiasów by mówić co jest ważniejsze od czego.
uniejów
Próbuję, ale nic z tego nie wychodzi.
Obecny kod:
  1. $zap_euro = "SELECT * FROM euro WHERE cat='2' AND status=0 AND title NOT LIKE 'Unie%' AND title NOT LIKE 'Mater%' AND title NOT LIKE 'Pozosta%' AND titlea NOT LIKE '%dopłat%' AND titlea NOT LIKE 'Odc.%' AND titlea LIKE '%państw%' OR titlea LIKE '%flag%' OR titlea LIKE '%hymn%' ORDER BY RAND() LIMIT 5 ";

Daje te same rezultaty - czyli te same (nazwijmy to) "nieoczekiwane" wyniki.
Nie wiem, o co chodzi z porównaniem z matematyką. Fakt faktem:
2+2*3 da nam 8
ale już
(2+2)*3 da nam 12
Ale za bardzo nie wiem, jak mam tę matmę "przetłumaczyć" na zapytanie (bo chyba o to chodzi).

Zapytanie powinno brzmieć:
POKAŻ:
- wszystko TYLKO z kategorii 2 (czyli cat='2')
- tytuły niezawierające w sobie fraz: "Unie", "Mater", "Pozosta"
- podtytuły niezawierające w sobie fraz: "dopłat", "Odc."
- podtytuły zawierające w sobie frazy: "państw", "flag", "hymn"

Chyba, że coś źle rozumiem sad.gif
nospor
+ to OR
* to AND
Prosta logika... Bez nawiasów najpierw wykonuje się *AND a dopiero potem +OR

  1. $zap_euro = "SELECT * FROM euro WHERE cat='2' AND status=0 AND title NOT LIKE 'Unie%' AND title NOT LIKE 'Mater%' AND title NOT LIKE 'Pozosta%' AND titlea NOT LIKE '%dopłat%' AND titlea NOT LIKE 'Odc.%' AND titlea LIKE '%państw%' and (titlea LIKE '%flag%' OR titlea LIKE '%hymn%') ORDER BY RAND() LIMIT 5 ";

Choć nadal nie wiem czy dobrze zrozumiałem to czego ma szukać. Nie mniej jednak w kodzie powyżej pokazałem ci o co chodzi z nawiasami. Może teraz będzie ci łatwiej.
uniejów
Uuuu... teraz nic nie pokazuje - w miejscu, gdzie mają się wyświetlać wyniki jest "biało" :|
nospor
Bo nie ma rekordów spełniających te warunki.
uniejów
Sprawdzięłm to na wyszukiwarce: rekorsy takie są.
Postanowiłem usunąć wszystkie title NOT LIKE - dalej to samo (czyli biało)
Usunąłem to, co w nawiasie i... ok - wyświetla, tyle, że tylko rekordy zawierające w "podtytule" państw. A jeszcze powinno pokazać "flag" oraz "hymn".

Kurcze - myślałem, że potrafię pisać zapytania... wink.gif
d3ut3r
Cytat
- wszystko TYLKO z kategorii 2 (czyli cat='2')
- tytuły niezawierające w sobie fraz: "Unie", "Mater", "Pozosta"
- podtytuły niezawierające w sobie fraz: "dopłat", "Odc."
- podtytuły zawierające w sobie frazy: "państw", "flag", "hymn"


  1.  
  2. SELECT * FROM euro WHERE cat=2
  3. AND title NOT LIKE '%Unie%'
  4. AND title NOT LIKE '%Mater%'
  5. AND title NOT LIKE '%Pozosta%'
  6. AND titlea NOT LIKE '%dopłat%'
  7. AND titlea NOT LIKE '%Odc.%'
  8. AND (titlea LIKE '%państw%' OR titlea LIKE '%flag%' OR titlea LIKE '%hymn%')
  9.  


Powinno działać. LIKE '%tekst%' ewentualnie można zamienić na LIKE 'tekst%' wówczas zostaną wykluczone lub dobrane rekordy zaczynające się od 'tekst'.
uniejów
d3ut3r - dziękuję BARDZO! smile.gif
Działa idealnie smile.gif

nospor - dzięki za wyjaśnienia -> przydadzą się na przyszłość smile.gif

Pozdrawiam!
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.