Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem wyboru rekordu z najmniejsza wartoscia w kolumnie "pozycja" pogupowane po innej kolumnie "dzial"
morowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 12.11.2007

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


Witam!

Mam tabele z wpisami dla kazdej strony. Tabela sklada sie z nastepujacych kolumn:
- id
- pozycja (strony w dziale)
- dzial (id_dzialu)
- moderacja (czy strona ma byc widoczna czy nie)

Potrzebuje wybrac wpisy dla kazdego dzialu w ktorych pozycja jest najmniejsza a moderacja jest rowna 1.

Przykładowe dane:
id pozycja dzial moderacja
1 1 1 1
2 2 1 1
3 1 2 1
4 3 2 1
5 4 2 1
7 1 3 1
6 2 2 1
8 1 4 1
9 2 4 1
10 1 4 1
11 2 5 1
12 2 5 1
13 3 1 1
14 10 1 1
15 7 3 1
16 3 3 1
17 1 5 1
18 5 2 1
19 6 2 1
20 5 1 1
21 4 1 1
22 1 1 1
23 8 3 1
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Ar2r
post
Post #2





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Spróbuj wykonać zapytanie:
SELECT MIN(pozycja) FROM xxxxx WHERE moderacja=1 GROUP BY dzial
Go to the top of the page
+Quote Post
morowiec
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 12.11.2007

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


Dzieki za odpowiedz smile.gif Chodzi mi jednek o cos troche innego smile.gif To zapytanie poda mi jaka jest najmniejsza wartosc parametru pozycja. Ja potrzebuje wiedziec w ktorym rekordzie jest ta najmniejsza wartosc smile.gif I tu pojawia sie problem smile.gif Potrzebna jest modyfikacja zaptytania podobnego do:

CODE
SELECT id, MIN(pozycja), dzial FROM `morowiec_new_pages` GROUP BY dzial


Z tym ze efekt tego bedzie bledny... Jezeli dla danego dzialu (5) pierwszy rekord ma id = 11 i pozycje 2, drugi z danego dzialu ma id =17 i pozcyje 1 to dany wiersz bedzie wygladal:
11 | 1 | 5

CODE
SELECT id, dzial FROM morowiec_new_pages GROUP BY dzial HAVING MIN (pozycja)


To nie wyswietla nic...
Go to the top of the page
+Quote Post
Ar2r
post
Post #4





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Nie mam obecnie możliwości przetestowania. Spróbuj coś takiego:
CODE
SELECT id, dzial FROM morowiec_new_pages WHERE pozycja=MIN(pozycja) GROUP BY dzial
Go to the top of the page
+Quote Post
morowiec
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 12.11.2007

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


CODE
zapytanie SQL:

SELECT id, dzial
FROM morowiec_new_pages
WHERE pozycja = MIN( pozycja )
GROUP BY dzial
LIMIT 0 , 30
MySQL zwrócił komunikat:

#1111 - Invalid use of group function


Baza danych to 4.0 niestety :/
Go to the top of the page
+Quote Post
Ar2r
post
Post #6





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Jeżeli używasz jakiegoś języka skryptowego zrób to w dwóch zapytaniach
CODE
SELECT MIN(pozycja) AS pozycja, dzial FROM morowiec_new_pages GROUP BY dzial

Potem w pętli:
CODE
SELECT id FROM morowiec_new_pages WHERE pozycja=$row['pozycja'] AND dzial=$row['dzial'] LIMIT 1


Ten post edytował Ar2r 13.11.2007, 13:14:56
Go to the top of the page
+Quote Post
heaven
post
Post #7





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


  1. SELECT *
  2. FROM (SELECT *
  3. FROM morowiec_new_pages m
  4. WHERE m.moderacja = 1
  5. ORDER BY m.dzial, m.pozycja) AS tab
  6. GROUP BY tab.dzial

powinno zadziałać

Ten post edytował heaven 13.11.2007, 17:39:16
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 Aktualny czas: 21.08.2025 - 14:09