Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Zapytanie - jak lekko zmodyfikować?
robos85
post 22.02.2010, 15:31:51
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


  1. SELECT DISTINCT (
  2. `a`.`question_id`
  3. ), `a`.`id` AS `qa_id` , `a`.`date` , `f`.`id` AS `f_id`
  4. FROM `exp_questions_answers` `a`
  5. LEFT JOIN `exp_questions_answers_flags` `f` ON `f`.`answer_id` = `a`.`id`
  6. WHERE `a`.`user_id` = '1'
  7. ORDER BY `a`.`question_id` DESC , `f_id` DESC


Mam taki wynik:

Chciałbym teraz z tego wyniki=u wybrać distinct(question_id). Jak daje group by to nie zachowuje mi tej kolejności jaka jest na tym wyniku - a jest ona koniecznie taka potrzebna. Jak mogę to przerobić, żeby z takiej postaci w tej kolejności wybierało mi distinct?

Ten post edytował robos85 22.02.2010, 15:32:42
Go to the top of the page
+Quote Post
phpion
post 22.02.2010, 15:34:23
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Może do każdego rekordu dopisz numer wiersza (na blogu nospora masz to ładnie opisane), następnie użyj GROUP BY question_id i ORDER BY numer wiersza. Powinno być tak jak chcesz.

Ten post edytował phpion 22.02.2010, 15:35:02
Go to the top of the page
+Quote Post
robos85
post 22.02.2010, 15:40:48
Post #3





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Nie za bardzo rozumiem tamtą rozpiskę z tymi @cośtam:/ Mógłbyś podać jakiś przykład lub coś co mnie jeszcze naprowadzi?
Go to the top of the page
+Quote Post
phpion
post 22.02.2010, 15:52:11
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




No chyba masz tam wszystko prosto opisane. @cośtam to zmienne w MySQL. Wykonaj sobie poniższy kod (dla jakieś tabeli):
Kod
mysql> SET @nr = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT *, (@nr := @nr + 1) AS licznik FROM tabela;
+----+--------+---------+
| id | pole   | licznik |
+----+--------+---------+
|  1 | xxx    |       1 |
|  2 | yyy    |       2 |
+----+--------+---------+
2 rows in set (0.00 sec)

Tutaj akurat licznik pokrył się z identyfikatorem, no ale widzisz jak to działa.
Go to the top of the page
+Quote Post
robos85
post 22.02.2010, 21:40:25
Post #5





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


OK, już zrozumiałem o co chodzi z tymi zmiennymi. Tylko co ma mi dać to ten dodatkowy wiersz?

Podłubałem i mam taki efekt, że to zapytanie
  1. SET @i=0;
  2. SELECT (@i := @i +1) AS `counter`, `a`.`question_id` , `a`.`id` AS `qa_id` , `a`.`date` , `f`.`id` AS `f_id` FROM `exp_questions_answers` `a` LEFT JOIN `exp_questions_answers_flags` `f` ON `f`.`answer_id` = `a`.`id` WHERE `a`.`user_id` = '1' ORDER BY `counter` DESC
daje mi takie wyniki:


Chciałbym teraz z tego wybrać question_id unikalnie jak distinct. Do tego qa_id ma byś sortowane jak teraz, czyli malejąco. Dodając group by mam takie zapytanie
  1. SET @i =0;
  2. SELECT (
  3. @i := @i +1
  4. ) AS `counter` , `a`.`question_id` , `a`.`id` AS `qa_id` , `a`.`date` , `f`.`id` AS `f_id`
  5. FROM `exp_questions_answers` `a`
  6. LEFT JOIN `exp_questions_answers_flags` `f` ON `f`.`answer_id` = `a`.`id`
  7. WHERE `a`.`user_id` = '1'
  8. GROUP BY `question_id`
  9. ORDER BY `counter` DESC

Lecz wynik jest taki:

jak widać, kolejność nie była zachowana i w tym przypadku nie powinno być 2ch NULL tylko 1:/

Jak sobie z tym poradzić?



poprawiłem zdjęcie bo coś nie działało

Ten post edytował robos85 22.02.2010, 21:40:08
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: 18.06.2025 - 17:07