Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] GROUP BY
mrjozo
post 17.11.2007, 20:51:05
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


--------------------
W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
Go to the top of the page
+Quote Post
Garrappachc
post 17.11.2007, 20:56:51
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ś.


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


CPU | GPU | RAM | HDD | OS
Go to the top of the page
+Quote Post
mrjozo
post 17.11.2007, 21:12:48
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


--------------------
W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
Go to the top of the page
+Quote Post
Virgon
post 17.11.2007, 21:20:31
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 17.11.2007, 21:24:10
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


--------------------
W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
Go to the top of the page
+Quote Post
phpion
post 17.11.2007, 22:46:31
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 winksmiley.jpg
Go to the top of the page
+Quote Post
mrjozo
post 17.11.2007, 22:56:07
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 smile.gif Ta wersja nawet IN(SELECT ....) nie obsługuje a możliwości zmiany nie mam


--------------------
W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
Go to the top of the page
+Quote Post
Garrappachc
post 18.11.2007, 22:32:44
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.


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


CPU | GPU | RAM | HDD | OS
Go to the top of the page
+Quote Post
mrjozo
post 19.11.2007, 19:28:21
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ą


--------------------
W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
Go to the top of the page
+Quote Post
phpion
post 19.11.2007, 19:46:28
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 19.11.2007, 20:48:37
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


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


CPU | GPU | RAM | HDD | OS
Go to the top of the page
+Quote Post
--astera--
post 19.11.2007, 21:00:52
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 20.11.2007, 09:29:08
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


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
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.07.2025 - 15:27