Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> skomplikowane zapytanie
Anna
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2006

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


Zapytanie powinno zwracać:
- dane wszystkich userów users_data.*
- sumę punktów zdobytych przez usera w danym teście SUM(users_asks.point)+SUM(answers.point), lub NULL jeśli user testu nie wypełniał
- maksymalną sumę punktów jaką user mógł zdobyć w danym teście

Macie jakieś pomysły? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Kombinuję w ten sposób:

  1. SELECT users_data. * , ask.suma + ans.suma, ask.max + ans.max
  2. FROM users_data LEFT JOIN (
  3. SELECT SUM( users_asks.point ) AS suma, COUNT( asks.ask_id ) AS max, users_asks.user_id
  4. FROM users_asks, asks
  5. WHERE users_asks.ask_id = asks.ask_id
  6. GROUP BY users_asks.user_id, asks.test_id
  7. ) AS ask
  8. USING ( user_id )
  9. LEFT JOIN (
  10.  
  11. SELECT SUM( answers.point ) AS suma, COUNT( asks.ask_id ) AS max, users_answers.user_id
  12. FROM users_answers, answers, asks
  13. WHERE users_answers.answer_id = answers.answer_id AND answers.ask_id = asks.ask_id
  14. GROUP BY users_answers.user_id, asks.test_id
  15. ) AS ans
  16. USING ( user_id )


(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował Anna 16.03.2007, 17:38:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Anna
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.11.2006

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


(IMG:http://bobola.net.pl/test3.png)

  1. --
  2. -- Zrzut danych tabeli `answers`
  3. --
  4. INSERT INTO `answers` VALUES (1, 2, 'Odpowiedź dobra', 1, 1);
  5. INSERT INTO `answers` VALUES (2, 2, 'Odpowiedź zła', 0, 1);
  6. INSERT INTO `answers` VALUES (3, 3, 'Dobra odpowiedź do pytania I w teście II', 1, 1);
  7. INSERT INTO `answers` VALUES (4, 3, 'Zła odpowiedź do pytania I w teście II', 0, 1);
  8. -- --------------------------------------------------------
  9. --
  10. -- Zrzut danych tabeli `asks`
  11. --
  12. INSERT INTO `asks` VALUES (1, 1, 'Pytanie pierwsze w teście, na które musisz sam odpowiedzieć', 1);
  13. INSERT INTO `asks` VALUES (2, 1, 'Pytanie drugie', 1);
  14. INSERT INTO `asks` VALUES (3, 2, 'Pytanie I do testu II', 1);
  15. INSERT INTO `asks` VALUES (4, 2, 'Pytanie II do testu II', 1);
  16. -- --------------------------------------------------------
  17. --
  18. -- Zrzut danych tabeli `tests`
  19. --
  20. INSERT INTO `tests` VALUES (1, 'test nr 1', 60, 1);
  21. INSERT INTO `tests` VALUES (2, 'Test nr 2', 60, 1);
  22. -- --------------------------------------------------------
  23. --
  24. -- Zrzut danych tabeli `users_answers`
  25. --
  26. INSERT INTO `users_answers` VALUES (1, 1);
  27. INSERT INTO `users_answers` VALUES (3, 1);
  28. -- --------------------------------------------------------
  29. --
  30. -- Zrzut danych tabeli `users_asks`
  31. --
  32. INSERT INTO `users_asks` VALUES (1, 1, 'Moja wyczerpująca odpowiedź', 1);
  33. -- --------------------------------------------------------
  34. --
  35. -- Zrzut danych tabeli `users_data`
  36. --
  37. INSERT INTO `users_data` VALUES (1, 'Tester', 'Testowicz', NULL, NULL);
  38. INSERT INTO `users_data` VALUES (2, 'Marek', 'Konrad', marek@konrad.pl, NULL);


oczekiwane wyniki:

--------------------------------------------------------------------------
users_data.* |suma |max
--------------------------------------------------------------------------
1 | Tester | Testowicz | NULL | NULL | 2 | 2
1 | Tester | Testowicz | NULL | NULL | 1 | 2
2 | Marek | Konrad | marek@konrad.pl | NULL | NULL | NULL
--------------------------------------------------------------------------

Można też podejść do tematu inaczej i do testu dołączyć usera z wynikami:

--------------------------------------------------------------------------------------------
test.name | users_data.firstname | users_data.surname | suma | max
--------------------------------------------------------------------------------------------
test nr 1 | Tester | Testowicz | 2 | 2
test nr 2 | Tester | Testowicz | 1 | 2

--------------------------------------------------------------------------------------------

Ten post edytował Anna 16.03.2007, 17:43:45
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 12:50