Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] GROUP BY
Forum PHP.pl > Forum > Przedszkole
mrjozo
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
Garrappachc
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ś.
mrjozo
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
Virgon
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?
mrjozo
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...
phpion
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 winksmiley.jpg
mrjozo
  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 smile.gif Ta wersja nawet IN(SELECT ....) nie obsługuje a możliwości zmiany nie mam
Garrappachc
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.
mrjozo
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ą
phpion
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 :/
Garrappachc
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ę.
-astera-
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
msulik
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".
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.