Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] SELECT z tabeli w zależności od wartości pola
Forum PHP.pl > Forum > Bazy danych
lukasamd
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?
kefirek
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)
lukasamd
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'
kefirek
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
lukasamd
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.
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.