![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z MySQL, konkretniej z pewnymi pytaniami:
Jak zadać pytanie do Bazy danych, tak, aby zwrócone zostały 2 kolumny: 1. Ilość użytkowników 2. Ilość gości Goście mają userid = 0 Natomiast Użytkownicy userid > 0. Pytanie polegało by na takim czymś
oczywiście nie działa... Podanto mam problemy z pytaniami: Cytat WYBIERZ COS Z TABELI, GDZIE CAT = 15 ORAZ (JEŻELI POLE>0 WTEDY id=5 W PRZECIWNYM RAZIE id=3) Jak się pisze takie pytania? Pozdrawiam. Ten post edytował Spirit86 17.12.2005, 19:33:56 -------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat WYBIERZ COS Z TABELI, GDZIE CAT = 15 ORAZ (JEŻELI POLE>0 WTEDY id=5 W PRZECIWNYM RAZIE id=3)
Co do pierwszego to moze zaraz cos wymysle -------------------- "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: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to zrobil tak:
To zwroci rekordy: n | user n | gosc gdzie n ilosc rekordow -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Mozna tez tak:
-------------------- Brak czasu :/
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Musze to napisac:
FIDO - to jest poprostu piękne Takie proste, a ja siedzialem i kombinowałem. Przyda sie na pewno. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Jest piekne, to fakt
![]() Gorzej moze byc z wydajnoscia takiego rozwiazania dla wiekszych tabel. Ja mialem akurat pod reka taka z kilkoma tysiecami, wiec problemu nie bylo, ale po odpaleniu EXPLAIN zauwazylem, ze niestety index z pola userid nie jest uzywany, wiec przy wiekszej ilosci danych moze to byc gorsze niz UNION zaproponowany wyzej. -------------------- Brak czasu :/
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
@FiDO sprawdzales to tylko dla MySQLa? Czy inne bazki tez?
-------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Tylko dla MySQL'a bo chwilowo nie mam niczego innego pod reka, ale jesli tylko RDBMS posiada tego rodzaju IF'y to mysle, ze powinno smignac bez problemu.
Moj PgSQL lezy i kwiczy, ale postaram sie sprawdzic pozniej na SQL Server 2005. [edit] No i sprawdzilem.. IF'a takiego tam nie ma, ale jest CASE, ktory tez dal rade. Dla porownania umiescilem tez wersje z UNION i czasy rozlozyly sie tak: 54% dla wersji z GROUP BY i 46% dla wersji z UNION. -------------------- Brak czasu :/
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat(FiDO @ 2005-12-17 20:49:55) Dla porownania umiescilem tez wersje z UNION i czasy rozlozyly sie tak: 54% dla wersji z GROUP BY i 46% dla wersji z UNION. Czyli które jest szybsze (% czego) ? ![]() -------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
% czasu wykonania, czyli UNION jest troszke szybsze. Przy wiekszej bazie dysproporcje moga sie zwiekszyc.
-------------------- Brak czasu :/
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Jak to milo slyszec ze znowu mam racje hihihih. Ale i tak takie rzeczy wychodza po dlugich testach.
-------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Nie powiedzialem, ze nie masz
![]() Jak tylko zobaczylem EXPLAIN'a do tego to troche zwatpilem w uzytecznosc takiego rozwiazania na wiekszych tabelach. Swoja droga ciekawe, jak by to sie skalowalo, gdyby grup po ktorych grupujemy bylo wiecej... ciekawe czy wtedy tez metoda z UNION byla by lepsza :] edit: nie moglem sie powstrzymac i sprawdzilem ![]() Jesli chodzi o SQL Server 2005 to juz przy 3 grupach szala sie odwraca, a czym ich wiecej (testowalem do 5) tym bardziej rosna dysproporcje, tym razem na korzysc rozwiazania z GROUP BY. MySQL jednak nie daje za wygrana i mimo teoretycznie gorszego EXPLAIN'a w wersji z UNION to rozwiazanie jest szybsze. Jak mozesz to sprawdz jak to sie rozegra na PgSQL :] edit2: nie chodzi mi o grupowanie po wiekszej ilosci pol, tylko z wieksza iloscia grup w takim sensie, ze np. chcemy znalezc na przykladzie tej tabeli ilosc userow z id = -1, osobno z id < 100, potem z id IN [101..130] i ostatnia grupa z id > 130 i do kazdej z tych grup ilosci. -------------------- Brak czasu :/
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat Swoja droga ciekawe, jak by to sie skalowalo, gdyby grup po ktorych grupujemy bylo wiecej... ciekawe czy wtedy tez metoda z UNION byla by lepsza :] He he he nie bylo mowy o grupowaniu po wiekszej ilosci pol. Ale w rzeczywistosci to roznie bywa. -------------------- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
ech, mam jeszcze jedno pytanie, jak zrobić coś takiego:
Jednym pytaniem wypytuje o szczegóły rekordu o id np. 15, pobieram wiele danych z tabeli, jednakże najlepiej by było, aby do tego zapytania, dołączyć coś takiego: id_następnego_rekordu, gdzie WARUNEK, id_poprzedniego_rekordu, gdzie ten sam WARUNEK. No ewentualnie zrobić do tego drugie pytanie, tylko jak pobrać dane o id rekordu większego i mniejszego jednym pytaniem? Próbowałem coś z LIMITEM 3, ale nie wychodziło, co ważne, jeżeli pytanie wygląda tak:
Chciałbym, aby jeżeli nie ma rekordu o takich Warunkach, wartość id_następnego_rekordu, bądź id_poprzedniego_rekordu równała się 0. Pozdrawiam -------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Mozesz konkretniej na przykladach podac, jakie rekordy masz a co ma byc rezultatem.
-------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę typu
id|cat|title... id - auto_increment W skrypcie pobieram dajmy na to jednym pytaniem
Jednakże chcę zrobić przechodzenie między kolejnymi obrazkami w kategori, więc pobieram poprzedni rekord, a właściwie jego id, który ma taką samą kategorię oraz następny. Co ważne rekordy muszą spełniać założenie (cat musi być taka sama jak w wybranym rekordzie, np. cat = 5). Chciałem napisać to jak najoptymalniej, tzn. zadając jak najmniej pytań do bazy danych. Kiedyś rozwiązałem to poprzez zadanie 3 pytań 1) Pytanie o wszystkie dane rekordu 2) Pytanie o następny id (WHERE id>aktualne_id ... ORDER by id DESC) 3) Pytanie o poprzedni id (WHERE id<aktualne_id ... ORDER by id ASC) Oczywiście jest to najmniej optymalne rozwiązanie. A jeszcze jedno założenie, oczywiście nie mogę zrobić czegoś takiego: poprzednie_id = aktualne-1; i analogicznie nastepne_id - z wiadomych przyczyn. Ten post edytował Spirit86 21.12.2005, 01:17:13 -------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Mozna w ten sposob ale wymogiem jest aby bo kolejne rekordy i poprzednie istnialy.
-------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
a jak nie będą istniały, ktoś je skasował, albo są przypisane do innej kategorii, wtedy już nie będzie działać.
-------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Mozesz uzyc podzapytania i numerowac rekordy, tylko nie wiem czy MySQL ma takie cos.
-------------------- |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
wiesz, jakoś nie za bardzo zrozumiałem Twój algorytm, jak ja mam takie coś zrobić w MySQL
![]() Widuję czasami w galeriach napisanych w php takie przechodzenie między kolejnymi obrazkami w galerii. Jak wyżej pisałem, zawsze używałem 2 odrębnych pytań, no ale, to jest nieoptymalne. Pozdro -------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 20:29 |