Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Warunek IF w zapytaniu, Da się?
-lukasamd-
post
Post #1





Goście







Witam,
czy da się uwarunkować jakoś zapytanie? Chcę wyciągnąć tabelę ostatnich postów z nieco egotycznego forum - mam tabelę z tematami z polami:

- first_post_id
- last_post_id

Niestety jeżeli nie było żadnej odpowiedzi to w last_post_id pojawia się 0 przez co nie mogę jej powiązać z innymi tabelami (od postów i od userów) no i temat jest opuszczany.

Czy dałoby się zrobić zapytanie o mniej- więcej takiej budowie:

  1. SELECT wartość1, wartość2, wartośćN, first_post_id IF(last_post_id == 0), wartośćN+1"


Chodzi o to, iż w wypadku gdy last_post_id jest równe 0, pobierana byłaby wartość first_post_id zaś w przeciwnym samo last_post_id

Da się?
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Da się: http://dev.mysql.com/doc/refman/4.1/en/con...tml#function_if
  1. IF( warunek, co_jeśli_prawda, co_jeśli_fałsz )


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #3





Goście







A jak to dokładniej wrzucić? Dodanie tego do mojego zapytania select:

  1. SELECT wartosci, IF( t.last_post_id=0, t.last_post_id=t.first_post_id, t.last_post_id ) reszta zapytania


Nie daje rezultatów - tzn. skrypt działa ale tak jakby nadal było 0. Chciałbym zrozumieć co w tym wypadku daje IF - czy jeżeli prawda to pobiera a a gdy fałsz b czy co innego...

EDIT:

Wrzucenie:

  1. SELECT wartosci, IF( t.last_post_id=0, t.last_post_id+1, t.last_post_id ) reszta zapytania


też nic nie daje choć w wypadku 0 powinno ustawić na 1.

Ten post edytował lukasamd 14.08.2008, 16:29:58
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


U mnie zapytanie:
  1. SELECT *, IF( last_post_id = 0, first_post_id, last_post_id ) AS last_post_id
  2. FROM tabela

działa prawidłowo. Na pewno w kolumnie last_post_id masz zera? Może jest tam NULL?


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #5





Goście







Wrzuciłem to co podałeś i sam warunek chyba działa, gdy jest fałsz to jest dobrze wybierane. Problem pojawia się gdy last_post_id = 0, powinno w last_post_id wrzucić wartość z first_post_id ale najwyraźniej tego nie robi bo tematów na liście nadal brakuje (tych bez odpowiedzi).

EDIT:
Wygląda to tak, jakby nie działało przypisanie przez AS, podam całe zapytanie jakie mam:
  1. SELECT p.ptime, p.poster_id, t.tid, t.topic, t.n_posts, t.n_views, IF(t.last_post_id = 0, t.first_post_id, t.last_post_id ) AS last_post_id, u.username
  2. FROM aef_topics t, aef_posts AS p, aef_users AS u
  3. WHERE last_post_id = p.pid AND p.poster_id = u.id
  4. ORDER BY ptime DESC LIMIT 5


Jak widać wartość uzyskiwana poprzez warunek jest stosowana także nieco dalej.


EDIT2:
Zrobiłem, powiązałem ze sobą numery id tematu w obu tabelach, potem pogrupowałem według tego pola:

  1. SELECT p.pid, p.ptime, p.poster_id, t.tid, t.topic, t.n_posts, t.n_views, u.username
  2. FROM aef_topics t, aef_posts AS p, aef_users AS u
  3. WHERE p.post_tid = t.tid AND p.poster_id = u.id
  4. GROUP BY tid
  5. ORDER BY pid DESC LIMIT 5


Działa tak jak należy smile.gif Mimo to dzięki za pomoc, IF może mi się jeszcze kiedyś przydać a teraz przynajmniej wiem jak je stosować.

Ten post edytował lukasamd 15.08.2008, 09:42:53
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 Aktualny czas: 21.08.2025 - 02:40