Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Pobranie maxymalnego wyniku
Watt
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

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


Witam,

Chciałem pobrać wyniki uszeregowane rand, maxymalny i minimalny wyknik zapytaniem:
Kod
query("SELECT tag_name, tag_amount, MIN(tag_amount), MAX(tag_amount)  FROM `mybb_stcp` WHERE tag_name != '' GROUP BY RAND() LIMIT ".$amount)

Dokładniej: Skrypt pobiera 10 rekordów, w tych 10 szuka największego i pokazuje go (muszę od razu [po pierwszej petli] mieć największy wynik).

I nie wykonuje sie poprawnie - dlaczego ?

Ten post edytował Watt 25.03.2010, 16:07:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zend
post
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


@mortus - dzięki, faktycznie podałem rozwiązdanie z błędem składniowym
  1. SELECT tag_name, tag_amount FROM `mybb_stcp` WHERE tag_name != '' ORDER BY tag_amount RAND() LIMIT 10

Ale to zapytanie i ten kawałek php które podałem kilka postów wyżej powinny załatwić sprawę
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


I tu znowu błąd
Cytat(zend @ 27.03.2010, 11:21:40 ) *
@mortus - dzięki, faktycznie podałem rozwiązdanie z błędem składniowym
  1. SELECT tag_name, tag_amount FROM `mybb_stcp` WHERE tag_name != '' ORDER BY tag_amount RAND() LIMIT 10
Ale to zapytanie i ten kawałek php które podałem kilka postów wyżej powinny załatwić sprawę
Jeśli już, to powinno być:
  1. SELECT tag_name, tag_amount FROM `mybb_stcp` WHERE tag_name != '' ORDER BY tag_amount, RAND() LIMIT 10
Ale takie zapytanie nie załatwia problemu, ponieważ nie można sortować po konkretnych wartościach i jednocześnie losowo. W takim zapytaniu uwzględniane jest tylko sortowanie po wartościach w kolumnie tag_amount, a co za tym idzie zawsze dostaniemy dziesięć tych samych rekordów.

EDIT:
Ogólnie skłaniałbym się ku takiemu rozwiązaniu
  1. SELECT tag_name, tag_amount FROM (SELECT tag_name, tag_amount FROM mybb_stcp WHERE tag_name != '' ORDER BY RAND() LIMIT 4) AS wylosowane WHERE tag_amount=(SELECT MIN(tag_amount) FROM wylosowane) OR tag_amount=(SELECT MAX(tag_amount) FROM wylosowane)
Teoretycznie zapytanie wygląda dobrze, niestety nie jest prawidłowe i pojawia się błąd, który mówi, że tabela wylosowane nie istnieje, czyli źródło nie jest zapisywane jako alias. Poszperałem, poszukałem i niestety bug ten był zgłoszony, ale do tej pory nikt go nie poprawił. W związku z tym obawiam się, że samym zapytaniem SQL nie zrobisz dokładnie tego, co chcesz i trzeba będzie wynik przetworzyć w PHP. W związku z tym polecam
  1. SELECT tag_name, tag_amount FROM (SELECT * FROM mybb_stcp WHERE tag_name != '' ORDER BY RAND() LIMIT 4) AS temp ORDER BY tag_amount
i skrypt
  1. <?php
  2. // nawiązanie połączenia z serwerem baz danych
  3. // wybieranie bazy danych
  4. $zapytanie = "SELECT tag_name, tag_amount FROM (SELECT * FROM mybb_stcp WHERE tag_name != '' ORDER BY RAND() LIMIT 4) AS temp ORDER BY tag_amount";
  5. $wyniki = mysql_query($zapytanie);
  6. if(false !== $wyniki && mysql_num_rows() > 0) {
  7. while($wiersz = mysql_fetch_array($wyniki)) {
  8. $tagi[] = $wiersz['tag_name'];
  9. }
  10. }
  11. $najmniej = $tagi[0];
  12. $najwiecej = $tagi[(count($tagi) - 1)];
  13. ?>


Ten post edytował mortus 27.03.2010, 12:43:30
Go to the top of the page
+Quote Post

Posty w temacie
- Watt   [MySQL] Pobranie maxymalnego wyniku   25.03.2010, 16:05:15
- - nospor   GROUP BY RAND() nie slyszalem by mozna bylo grupo...   26.03.2010, 08:20:55
- - Watt   Tak, ale to nie wyrzuca błędu bazy danych, Order b...   26.03.2010, 17:42:47
- - zend   [SQL] pobierz, plaintext SELECT tag_name, tag_amou...   26.03.2010, 18:11:28
- - piotrooo89   @zend Twoje zapytanie też nie jest pierwszych lotó...   26.03.2010, 18:40:22
- - zend   To nie miało być GROUP tylko ORDER zagapiłem się ...   26.03.2010, 19:56:45
- - Watt   Witam serdecznie, mam pytanie - zapytanie wyrzuca ...   26.03.2010, 21:23:52
- - zend   [SQL] pobierz, plaintext SELECT tag_name, tag_amou...   26.03.2010, 21:35:26
- - Watt   Treść błędu się zmieniła: KodMyBB has experienced ...   26.03.2010, 21:39:32
- - zend   [SQL] pobierz, plaintext SELECT tag_name, tag_amou...   26.03.2010, 21:44:45
- - Watt   Witaj, KodMyBB has experienced an internal SQL er...   26.03.2010, 21:51:28
- - zend   Chcesz największy i najmniejszy rekord? Posortowan...   26.03.2010, 21:56:19
- - Watt   Postaram sie wyjaśnić na przykładzie [Tag - tag_na...   26.03.2010, 22:08:08
- - zend   No! Trzeba tak bylo odrazu [SQL] pobierz, pl...   26.03.2010, 22:16:42
- - Watt   A da się to jakoś pomieszać - robie chmurkę tagów ...   26.03.2010, 22:19:01
- - zend   W php było by ci o niebo łatwiej [PHP] pobierz, p...   26.03.2010, 22:56:43
- - mortus   Cytat(zend @ 26.03.2010, 22:16:42 ) N...   27.03.2010, 07:28:13
- - Watt   Witam,wielkie dzięki za pomoc z tym, że to dalej n...   27.03.2010, 10:26:33
- - mortus   Spróbuj dać die(mysql_error) zamiast die (':...   27.03.2010, 10:30:48
- - zend   @mortus - dzięki, faktycznie podałem rozwiązdanie ...   27.03.2010, 11:21:40
|- - mortus   I tu znowu błądCytat(zend @ 27.03.2010, 11...   27.03.2010, 12:42:30
- - piotrooo89   o wiele wydajniejszym jest przerzucenie funkcjonal...   27.03.2010, 11:26:51
- - Watt   Właśnie, a ja nie mogę pozwolić sobie na 'szal...   27.03.2010, 17:21:34


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: 18.09.2025 - 19:24