Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: lista w mysql, cd
Forum PHP.pl > Forum > Bazy danych > MySQL
kicaj
Tabela: posts
post_id int auto_i...
post_title var..
post_content text...
post_user_id int...
post_parent_id

Wybrac najnowsze posty, wyswietlajac `post_title` rodzica (`post_parent_id`)

Udalo mi sie to wykonac, ale jesli byl post bez odpowiedzi to sie sypalo...
JTZ?
popbart
  1. SELECT t1.post_title AS title_rodzic,t2.post_title AS title_dziecko
  2. FROM posts AS t1 RIGHT JOIN posts AS t2 ON(t2.post_parent_id=t1.post_id)

Wyjaśnienie- rodzic to dziecko bez rodzica smile.gif
Jeżeli chcesz odwrotnie to:
  1. SELECT IF(t1.post_title IS NULL,t2.post_title,t1.post_title) AS title_rodzic,
  2. IF(t1.post_title IS NULL,NULL,t2.post_title) AS title_dziecko
  3. FROM posts AS t1 RIGHT JOIN posts AS t2 ON(t2.post_parent_id=t1.post_id)
kicaj
Zadne nie pomoglo, nawet po moich przerobkach (tymbardziej:P)

Podaje zrzut tabeli:
  1. CREATE TABLE `posts` (
  2. `post_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `post_title` varchar(255) NOT NULL DEFAULT '',
  4. `post_content` text NOT NULL,
  5. `post_add` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  6. `post_forum_id` int(11) NOT NULL DEFAULT '0',
  7. `post_user_id` int(11) NOT NULL DEFAULT '0',
  8. `post_parent_id` int(11) NOT NULL DEFAULT '0',
  9. PRIMARY KEY (`post_id`),
  10. UNIQUE KEY `post_id` (`post_id`)
  11. ) TYPE=MyISAM;
  12.  
  13. INSERT
  14. INTO `posts` VALUES (1, 'ABC', 'tresc abc', '2005-02-11 00:00:00', 5, 1, 0);
  15. INSERT
  16. INTO `posts` VALUES (2, 'DEF', 'tresc def', '2005-02-08 00:00:00', 5, 2, 0);
  17. INSERT
  18. INTO `posts` VALUES (3, 'GHU', 'tresc ghi', '2005-02-09 00:00:00', 5, 3, 0);
  19. INSERT
  20. INTO `posts` VALUES (4, '', 'odp1 do abc', '2005-02-12 01:07:31', 5, 4, 1);
  21. INSERT
  22. INTO `posts` VALUES (5, '', 'odp1 do def', '2005-02-12 01:08:22', 5, 5, 2);
  23. INSERT
  24. INTO `posts` VALUES (6, '', 'odp2 do abc', '2005-02-12 01:08:55', 5, 6, 1);

Temat ABC ma 3 posty (2 odpowiedzi),
DEF - 2 (1 odpowiedz)
GHI - 1 (brak odpowiedzi)

Wyswietlic, posty wg najnowszej daty, wyswietlajac ostatnia date, ilosc postow i post_user_id ostatniej odpowiedzi
Koniecznie w jednym zapytaniu!

UPDATE:
Ulozylem cos takiego, dziala poprawnie:
  1. SELECT p1.post_title, MAX( p1.post_add ) AS newest, IF ( p1.post_parent_id =0, p1.post_id, p1.post_parent_id ) AS parents, COUNT( p1.post_id ) AS posts
  2. FROM posts p1
  3. GROUP BY parents
  4. ORDER BY newest DESC

Wyswietla temat, najnowsza date, id rodzica i liczbe postow, ale nie wiem jak wyciagnac id usera w najnowszych postach
popbart
Może tak ci pomogę smile.gif

  1. SELECT substring_index(group_concat( post_user_id separator '|' ),'|',-1) AS last_user

Pozrawiam,
Batek P.
kicaj
Cytat(popbart @ 2005-02-13 14:01:24)
Może tak ci pomogę smile.gif

  1. SELECT substring_index(group_concat( post_user_id separator '|' ),'|',-1) AS last_user

Pozrawiam,
Batek P.

To jest dla >= MySQL 4.1.x
popbart
No to sprawa jest bardziej skomplikowana sad.gif
Potrzebujesz jednocześnie count z grupowania i id ostatniego usera, więc sztuczka z poprzedniego tematu nie wchodzi w grę.
Jeżeli jest to możliwe, to dodaj do tabeli pole last_user_id i w aplikacji po każdym insercie wykonaj update z aktualnym user_id.
Z takiego rozwiązania często się korzysta(np. ilość postów na forum), gdyż jest to szybkie.

Pzdr.
kicaj
Cytat(popbart @ 2005-02-15 23:57:28)
...Jeżeli jest to możliwe, to dodaj do tabeli pole last_user_id i w aplikacji po każdym insercie wykonaj update z aktualnym user_id...

A jesli ostatni post bedzie usuwany, to bedzie trzeba wyciagac ostatni, i upadate

Narazie nie skorzystam, zrobilem to dwoma zapytaniami... sad.gif
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.