Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] SELECT z tabeli w zależności od wartości pola
-lukasamd-
post 26.02.2009, 11:38:38
Post #1





Goście







Witam,
mam pewien problem w skonstruowaniu zapytania.

Posiadam 4 tabele:
- komentarze
- artykuły
- newsy
- inne
- zdjęcia

Chciałbym wyciągnąć z tabeli ostatnie komentarze. Nie jest to problem, ponieważ znajduje się tam pole z datą dodania. Chodzi o to, że chciałbym wyciągnąć również inne dane z innych tabel, np. tytuł newsa do którego jest dany komentarz.

W tabeli komentarze mam pole odpowiadające za typ, które może mieć takie wartości: A, N, I, Z - odpowiednio do artykułów, newsów, innych i zdjęć.

Jak wyciągnąć ostatnie komentarze oraz tytuły odpowiadających im elementów? Wszystko sprowadza się do tego, że gdy pole komentarz_typ ma A, tytuł ma być pobierany z tabeli artykuły, gdy zaś komentarz_typ = N, z tabeli newsy itp. Moje pytanie: jak to zrobić w praktyce?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
ddiceman
post 27.02.2009, 14:51:38
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


http://forum.php.pl/index.php?showtopic=11...mp;#entry574111
Go to the top of the page
+Quote Post
kefirek
post 27.02.2009, 16:22:24
Post #3





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Coś w ten desen bedzie dodaj sobie tylko WHERE
  1. SELECT comment_id, article_subject AS nazwa, comment_message
  2. FROM fusion_comments LEFT JOIN fusion_articles ON (article_id=comment_item_id)
  3. UNION
  4. SELECT comment_id, photo_title AS nazwa, comment_message
  5. FROM fusion_comments LEFT JOIN fusion_photos ON (photo_id=comment_item_id)
  6. UNION
  7. SELECT comment_id, news_subject AS nazwa, comment_message
  8. FROM fusion_comments LEFT JOIN fusion_news ON (news_id=comment_item_id)
  9. UNION
  10. SELECT comment_id, page_title AS nazwa, comment_message
  11. FROM fusion_comments LEFT JOIN fusion_custom_pages ON (page_id=comment_item_id)


Ten post edytował kefirek 27.02.2009, 16:22:47
Go to the top of the page
+Quote Post
-lukasamd-
post 28.02.2009, 23:48:07
Post #4





Goście







Kiedy daję:

  1. SELECT comment_id, article_subject AS nazwa, comment_message
  2. FROM fusion_comments LEFT JOIN fusion_articles ON (article_id=comment_item_id)
  3. UNION
  4. SELECT comment_id, photo_title AS nazwa, comment_message
  5. FROM fusion_comments LEFT JOIN fusion_photos ON (photo_id=comment_item_id)
  6. UNION
  7. SELECT comment_id, news_subject AS nazwa, comment_message
  8. FROM fusion_comments LEFT JOIN fusion_news ON (news_id=comment_item_id)
  9. ORDER BY comment_datestamp DESC LIMIT 5


To wywala mi błąd:

Unknown column 'comment_datestamp' in 'order clause'
Go to the top of the page
+Quote Post
kefirek
post 1.03.2009, 09:59:35
Post #5





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Tak powinno dzialac
  1. SELECT * FROM (
  2. (SELECT comment_id, article_subject AS nazwa, comment_message, comment_datestamp FROM fusion_comments LEFT JOIN fusion_articles ON (article_id=comment_item_id))
  3. UNION ALL
  4. (SELECT comment_id, photo_title AS nazwa, comment_message, comment_datestamp FROM fusion_comments LEFT JOIN fusion_photos ON (photo_id=comment_item_id))
  5. UNION ALL
  6. (SELECT comment_id, news_subject AS nazwa, comment_message, comment_datestamp FROM fusion_comments LEFT JOIN fusion_news ON (news_id=comment_item_id))
  7. ) razem
  8. ORDER BY comment_datestamp DESC LIMIT 5
Go to the top of the page
+Quote Post
-lukasamd-
post 2.03.2009, 22:22:24
Post #6





Goście







Niestety nie działa mi to prawidłowo, po wrzuceniu zapytania do kodu:

  1. <?php
  2. $result = dbquery("SELECT * FROM (
  3. (SELECT comment_id, article_subject AS nazwa, comment_message, comment_datestamp
  4. FROM fusion_comments
  5. LEFT JOIN fusion_articles ON (article_id=comment_item_id))
  6. UNION ALL
  7. (SELECT comment_id, photo_title AS nazwa, comment_message, comment_datestamp
  8. FROM fusion_comments
  9. LEFT JOIN fusion_photos ON (photo_id=comment_item_id))
  10. UNION ALL
  11. (SELECT comment_id, news_subject AS nazwa, comment_message, comment_datestamp
  12. FROM fusion_comments
  13. LEFT JOIN fusion_news ON (news_id=comment_item_id))
  14. ) razem
  15. ORDER BY comment_datestamp DESC LIMIT 5");
  16.  
  17. while($row = dbarray($result)){
  18.  echo 'Komentarz nr '.$row['comment_id'].' z elementu '.$row['nazwa'].':<br />
  19.        '.$row['comment_message'].'<br /><br />';
  20. }
  21. ?>


w efekcie mam:

Kod
Komentarz nr 3200 z elementu NAZWA_ARTA_Z_KOMENTARZEM_3200:
Treść komentarza 3200

Komentarz nr 3200 z elementu NAZWA_ZDJĘCIA_Z_GALERII:
Treść komentarza 3200

Komentarz nr 3200 z elementu NAZWA_NEWSA:
Treść komentarza 3200

Komentarz nr 3199 z elementu NAZWA_ARTA_Z_KOMENTARZEM_3200:
Treść komentarza 3199

Komentarz nr 3199 z elementu NAZWA_ZDJĘCIA_Z_GALERII:
Treść komentarza 3199



Co się zgadza: 3200 i 3199 są ostatnimi komentarzami, oba są z tego samego artykułu.
Co się nie zgadza: 3x i 2x to samo, nazwa newsa i zdjęcia z galerii zupełnie z kosmosu.
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: 14.08.2025 - 08:40