![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
GROUP BY RAND()
nie slyszalem by mozna bylo grupowac po losowosci ![]() A na przyszlosc wyswietlas sobie komunikat bledu bazy to bedziesz od razu sam widzial co jest źle. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale to nie wyrzuca błędu bazy danych, Order by nie wiedziałem jak zrobić, żeby pobrało dowolnie wybrane tagi dlatego tak kombinowałem.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
@zend Twoje zapytanie też nie jest pierwszych lotów, gdzie widziałeś taka składnie do wyświetlania losowego rekordu? ~nospor już o tym wspominał.
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie, mam pytanie - zapytanie wyrzuca błąd:
Kod MyBB has experienced an internal SQL error and cannot continue.
SQL Error: 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Query: SELECT tag_name, tag_amount, MIN(tag_amount), MAX(tag_amount) FROM `mybb_stcp` WHERE tag_name IN( SELECT `tag_name` FROM `mybb_stcp` ORDER BY RAND() LIMIT 9999999 ) LIMIT 9999999 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj tak, bez limitu w wewnętrznym zapytaniu, poza tym lepiej by było szukać danych po id które było by typu int, a nie szukać po varchar'ach Ten post edytował zend 26.03.2010, 21:36:48 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Treść błędu się zmieniła:
Kod MyBB has experienced an internal SQL error and cannot continue.
SQL Error: 1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause Query: SELECT tag_name, tag_amount, MIN(tag_amount), MAX(tag_amount) FROM `mybb_stcp` WHERE tag_name IN( SELECT `tag_name` FROM `mybb_stcp` ORDER BY RAND() ) LIMIT 9999999 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
Jaką wersję mysql'a masz? Coś mi na to wygląda że ta nasza zabawka nie ma ochoty pracować ![]() Ten post edytował zend 26.03.2010, 21:52:45 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
Kod MyBB has experienced an internal SQL error and cannot continue. SQL Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY tag_name' at line 5 Query: SELECT tag_name, tag_amount, MIN(tag_amount), MAX(tag_amount) FROM `mybb_stcp` WHERE tag_name IN( SELECT `tag_name` FROM `mybb_stcp` ORDER BY RAND() ) LIMIT 10 GROUP BY tag_name Wersja klienta MySQL: 4.1.10 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
Chcesz największy i najmniejszy rekord? Posortowane rekordy z losowych? Czy może jeszcze coś innego?
Zapytanie tego typu zwraca jeden rekord z wartością największą i najmniejszą, a nie wiem czy w tym rzecz Ten post edytował zend 26.03.2010, 21:58:38 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Postaram sie wyjaśnić na przykładzie
[Tag - tag_name] - [Ilość tagów - tag_amount] lol - 2 lubie - 4 placki - 7 lalala - 1 hahaha - 3 forum - 6 php - 2 Zapytanie ma pobrac powiedzmy 4 losowe tagi i z nich wybrac największy i najmniejszy. Przyklad: lol, hahaha, forum, lubie Najmniejszy: lol Największy: forum |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
No! Trzeba tak bylo odrazu
![]()
Teraz największy rekord będzie na samym początku, a najmniejszy na końcu. Ale dalej nie rozumiem po co ten warunek sprawdzający czy dany tag nie jest pusty.. Ten post edytował zend 26.03.2010, 22:18:46 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
A da się to jakoś pomieszać - robie chmurkę tagów i to będzie średnio wyglądało jak to będzie po kolei, chciałem żeby to wyglądało jak chmurka
![]() Ten post edytował Watt 26.03.2010, 22:46:11 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
W php było by ci o niebo łatwiej
Możesz zastosować takie rozwiązanie jeżeli szkoda Ci przelecieć wyniki zapytania jeszce jedną pentlą ![]() |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
No! Trzeba tak bylo odrazu Po pierwsze zapytanie składniowo niepoprawne (brakuje przecinka po tag_amount DESC). Po drugie zapytanie nie działa tak, jak powinno. Dlaczego? Ano dlatego, że najpierw sortuje malejąco po kolumnie tag_amount, a później to co już zostało posortowane ma posortować w sposób losowy i nie sortuje. Wynikiem zapytania zawsze będą te same rekordy, czyli 10 rekordów z całej tabeli mybb_stcp, których tag_amount jest największe.![]() Teraz największy rekord będzie na samym początku, a najmniejszy na końcu. Ale dalej nie rozumiem po co ten warunek sprawdzający czy dany tag nie jest pusty.. Postaram sie wyjaśnić na przykładzie Jeśli wartość tag_amount może się powtarzać, to zapytanie, które wybiera z pośród kilku losowych rekordów rekord o największym i najmniejszym tag_amount nie ma sensu. Dlaczego? Dlatego, że może być kilka rekordów o najmniejszym lub największym tag_amount. Obrazując: załóżmy, że z przykładowych danych, które podałeś wylosowaliśmy 4 rekordy zawierające tag_name i tag_amount. Niech to będą: [hahaha - 3], [forum - 6], [lol - 2] i [php - 2]. Zauważ, że w wylosowanych rekordach mamy dwa, które mają najmniejsze tag_amount. Które zatem mamy wybrac?[Tag - tag_name] - [Ilość tagów - tag_amount] lol - 2 lubie - 4 placki - 7 lalala - 1 hahaha - 3 forum - 6 php - 2 Zapytanie ma pobrac powiedzmy 4 losowe tagi i z nich wybrac największy i najmniejszy. Przyklad: lol, hahaha, forum, lubie Najmniejszy: lol Największy: forum Gdyby wartość tag_amount była różna dla każdego tag_name, to rozwiązaniem byłoby przy czym pierwszy wiersz zawierałby najmniejszą wartość tag_amount, a drugi największą. Rozwiązanie takie zadziała również dla powtarzających się wartości tag_amount, ale z losowych rekordów wybierze wszystkie, które mają tag_amount najmniejsze i wszystkie, które mają tag_amount największe. EDIT: Po namyśle nadal nie jestem pewien, czy powyższe zapytanie zadziała bezbłędnie. Na pewno bezbłędnie zadziała coś takiego: przy czym rekordy o najmniejszym tag_amount będą pierwsze (nie wiemy ile ich będzie, jeśli wartość tag_amount może się powtarzać), a rekordy o największym tag_amount będą ostatnie (i też nie wiemy ile ich będzie, jeśli wartość tag_amount może się powtarzać). Oczywiście LIMIT dowolny (ja wpisałem 4). Ten post edytował mortus 27.03.2010, 07:44:22 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 1 Dołączył: 13.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,wielkie dzięki za pomoc z tym, że to dalej nie działa prawidłowo - odwołałem się tak:
I nie zwraca mi wyników - co jest tego przyczyną? Ten post edytował Watt 27.03.2010, 10:27:25 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj dać die(mysql_error) zamiast die (':<'). Zobaczysz, czy zapytanie się wykonuje, czy wywala błąd.
EDIT: Zapytanie testowałem i powinno działać zarówno na MySQL-u w wersji 4.1.10, jak i nowszym. Ten post edytował mortus 27.03.2010, 10:33:27 |
|
|
![]()
Post
#20
|
|
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
Ale to zapytanie i ten kawałek php które podałem kilka postów wyżej powinny załatwić sprawę |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 04:34 |