Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] GROUP BY
mrjozo
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


Witam,

mam tabele:

img_id,gal_id

Chciałbym pobrać 10 najnowszysch zdjęć z różnych galerii

Robię tak:

  1. SELECT img_id FROM tabela GROUP BY gal_id ORDER BY img_id DESC


Zapytanie to zwraca mi ostatnie 10 zdjęc z galerii jednak są to pierwsze zdjęcia w galeriach

Tzn dla

1,1
2,1
3,1
5,2
6,3
7.2

Zwraca 1,1 zamiast 3,1 <- to zdjęcie było ostanie w tej galerii

Jak można to zrobić?
//pobrać 10 najnowszych zdjęć z unikalnych(każda inna) galerii

Ten post edytował mrjozo 17.11.2007, 21:09:51
Go to the top of the page
+Quote Post
Garrappachc
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 2
Dołączył: 15.11.2007
Skąd: Kraków

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


A to może weź
  1. SELECT img_id FROM tabela ORDER BY img_id DESC, gal_id DESC LIMIT 10


Chyba o to chodzi, ale dokładnie nie wiem bo toś to źle wytłumaczyłeś.
Go to the top of the page
+Quote Post
mrjozo
post
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


To co podałeś nie zadziała:) Pobiera 10 zdjęć najnowszych zdjęć (a jak ktoś dodał 10 zdjęc to galerii to akurat pokaże zdjęcia z tej jednej galerii) a chce żeby pokazało 10 najnowszych zdjęć z różnych galerii
Go to the top of the page
+Quote Post
Virgon
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.10.2007

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


Cytat(mrjozo @ 17.11.2007, 21:12:48 ) *
To co podałeś nie zadziała:) Pobiera 10 zdjęć najnowszych zdjęć (a jak ktoś dodał 10 zdjęc to galerii to akurat pokaże zdjęcia z tej jednej galerii) a chce żeby pokazało 10 najnowszych zdjęć z różnych galerii


Ale chodzi Ci o 10 z tej 10 z tej i 10 z tej czy po np. 2 z każdej?
Go to the top of the page
+Quote Post
mrjozo
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


Po 1 z każdej

czyli jak dodano 123 zdjęcia do galerii nr 89 to zapytanie powinno zwrócić ostatnio dodane zdjęcie do tej galerii, a zwraca mi pierwsze

Potrzebuje najnowsze 10 zdjęć, ale każde z innej galerii...

Ten post edytował mrjozo 17.11.2007, 21:37:16
Go to the top of the page
+Quote Post
phpion
post
Post #6





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




Dostosuj sobie pod swoje potrzeby:
  1. SELECT category.id, category.name, article.id, article.title FROM article_category INNER JOIN category ON category.id=article_category.category_id
  2. INNER JOIN article ON article_category.article_id=article.id
  3. WHERE article.id IN (SELECT article_category.article_id FROM article_category WHERE article_category.category_id=category.id LIMIT 5 )

Jest tylko jeden szkopuł. Na mojej wersji MySQL (5.0.26) wywala:
Kod
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

Może u Ciebie zadziała (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
mrjozo
post
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


  1. CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near...


Na mojej 4.0 tym bardziej nie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ta wersja nawet IN(SELECT ....) nie obsługuje a możliwości zmiany nie mam
Go to the top of the page
+Quote Post
Garrappachc
post
Post #8





Grupa: Zarejestrowani
Postów: 76
Pomógł: 2
Dołączył: 15.11.2007
Skąd: Kraków

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


A takie cuś

  1. <?php
  2. for ($i=0; $i<=9; $i++)
  3. {
  4.   $sql = "SELECT * FROM `tabela` WHERE `gal_id`=$i LIMIT 1";
  5.   $wyk = mysql_query($sql);
  6.   $temp = mysql_fetch_array($wyk);
  7.   $obrazki[$i] = $temp['img_id'];
  8.   $galerie[$i] = $temp['gal_id'];
  9. }
  10. ?>

I wtedy będziesz miał w tabeli $obrazki 10 najnowszych obrazków z RÓŻNYCH galerii.
Go to the top of the page
+Quote Post
mrjozo
post
Post #9





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


Oj nie bardzo Garrappachc Twoje "zapytanie" ( w zasadzie 10 zapytań) zwróci 10 obrazków z galerii od 1-10 a nie najnowszych

Jedynym rozsądnym rozwiązaniem jest zrobienie 2 zapytań, w tym pierwsze z nich tworzy tabelę tymczasową
Go to the top of the page
+Quote Post
phpion
post
Post #10





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




Możesz ewentualnie pobrać najpierw id wszystkich kategorii, a następnie w pętli zrobić selecta dla każdej kategorii z limitem na 10. Na pewno zadziała ale liczba zapytań będzie rosła wraz ze wzrostem liczby kategorii :/
Go to the top of the page
+Quote Post
Garrappachc
post
Post #11





Grupa: Zarejestrowani
Postów: 76
Pomógł: 2
Dołączył: 15.11.2007
Skąd: Kraków

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


No to jest dobre rozwiązanie.

  1. <?php
  2. $sql = "SELECT * FROM `tabela` ORDER BY `gal_id` DESC LIMIT 10";
  3. $wyk = mysql_query($sql);
  4. $i = 0;
  5. while ($temp = mysql_fetch_array($wyk))
  6. {
  7.   $obrazki[$i]=$temp['img_id'];
  8.   $galerie[$i]=$temp['gal_id'];
  9.   $i++;
  10. }
  11. ?>


Tylko nie obczajam jak zrobić tak, aby wybierała 10 ostatnio dodanych zdjęć z różnych galerii. Trzeba by dodać pole w tabeli, które by miało datę dodania ostatniego zdjęcia.
  1. ALTER `tabela` ADD `data`=datetime AFTER `gal_id`
(czy jakoś tak, zrób to w PHPMyAdmin)

i aktualizować datę przy każdym dodaniu zdjęcia
  1. <?php
  2. $datetime = date("Y-m-d H:i:s", time());
  3. $sql = "UPDATE `tabela` SET `data`='$datetime' WHERE `img_id`=$obraz_który_został_właśnie_dodany";
  4. ?>

i sortować.
Ta data bardzo uprości sprawę.

Ten post edytował Garrappachc 19.11.2007, 20:49:33
Go to the top of the page
+Quote Post
--astera--
post
Post #12





Goście







Ja jestem zoltodziobem ale moze cos takiego zadziala
  1. SELECT img_id FROM tabela WHERE gal_id=MAX(gal_id) ORDER BY img_id DESC;


oczywiscie jesli gal_id jest autoinkrementowane i przy zalozeniu ze nowsze zdjeca maja wyzsze klucz
przynajmniej mi sie tak wydaje

pozdrawiam
Go to the top of the page
+Quote Post
msulik
post
Post #13





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Wystarczy trochę poszukać na forum: http://forum.php.pl/index.php?s=&showt...st&p=411312 - patrz post nr 7. Tam sortowanie wg "pozycja" spróbuj zamienić na "img_id DESC", a "dzial" na "gal_id".

Ten post edytował msulik 20.11.2007, 09:29:41
Go to the top of the page
+Quote Post

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: 15.09.2025 - 08:27