![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 5.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam taką tabelę "osoby" a w niej "imiona":
Jan Jan Maria Maria Maria Rokita chcę policzyć rekordy żeby wynik na stronie wyświetlał się w formacie: Jan: 2 Maria: 3 Rokita: 1 Nie mam pojęcie jak za pomocą funkcji SELECT COUNT(*)imiona FROM osoby wycągnąć wszystkie te rekordy za jednym razem przy pomocy jednego skryptu. Nie wiem na pewno bo się uczę ale chyba to trzeba zrobić w jakiejś pętli. Byłbym wdzięczny za przykłady. Ps. Cały dzień już się z tym męczę. Please HELP! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 19.01.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
o ile się nie mylę, za pomocą zwykłego select count tego nie zrobisz. możesz oczywiście wykonywać select count dla każdego imienia, ale to będzie wydajnościowa bomba.
ja sobie myślę tak: 1. pobierasz wszystkie rekordy 2. bierzesz je w pętlę 3. tworzysz tablicę $imiona 4.1. jeśli $imiona[$imie] istnieje (i jest liczbą), inkrementujesz. 4.2. jeśli nie istnieje, tworzysz ją i ustawiasz wartość na jeden 5. wyświetlasz ok...? -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 5.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wskazówki Fipaj. To jest tak jak myślałem że funkcja SELECT nie jest do tego najlepsza. Niestey mówiąc że jestem początkujący miałem na myśli na prawdę początkujący. Tzn chyba gorzej niż przedszkolak bo nawet nie bardzo wiem jak to wszystko co mi napisałeś zrobić. Niestety wszędzie szukam wiadomości i w internecie i w książkach ale nie potrafię ruszyć. Może znasz jakieś dobre źródło gdzie mógłbym taki przykład znaleźć. Tzn jego rozwiązanie.
Ale wielkie dzięki jakiś kierunek myśloy jest. |
|
|
-Guest- |
![]()
Post
#4
|
Goście ![]() |
w tagach php
![]()
---------- Usunalem twoj post bez tagow. Bylo tam dopisane: Cytat nie testowalem ale powinno dzialac -- dr_bonzo |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
OMG:
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 5.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Gest!!!!!!! Jesteś wielki
![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
OMG:
O ile zliczanie wg. jednej kolumny jest dla mnie jasne to jak (zakładając, że mamy kolumnę nazwisko) zrobić w jednym zapytaniu zliczanie jeszcze nazwiska? Podobno coś można wykombinować z UNION, ale jak później wyciągnąć dane? Załóżmy, że mam:
|
|
|
![]()
Post
#8
|
|
![]() 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%) ![]() ![]() |
@Watexon Spoko wedlug Ciebie najlepszy sposob a wedlug mnie nie ma nic gorszego od tego przykladu. No ale mysle ze dojdziesz dlaczego.
@anita Jesli stosujesz UNION to musisz sobie oflagowac rekordy ktory jest imie a ktory nazwisko. czyli cos takiego:
Pole imie i nazwisko musza byc tego samego typu. A wyciaganie juz jest standardowe sprawdzasz wartosc w polu typ_rekordu. -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
@anita Jesli stosujesz UNION to musisz sobie oflagowac rekordy ktory jest imie a ktory nazwisko.
Pole imie i nazwisko musza byc tego samego typu. A wyciaganie juz jest standardowe sprawdzasz wartosc w polu typ_rekordu. Do tego doszłam ![]() Arek 4 Wojtek 2 Marcin 1 Agata 0 i niżej: Kowalski 4 Nowak 2 Jędrzejczak 1 Borowczyk 0 w poniższym kodzie mam jedną pętle, która wywołuje zapytanie i mam wyświetlone imiona oraz obok liczniki...
...jednak co mam zrobić, żeby ponownie zrobić pętle nie wywołując zapytania i wyświetlić nazwiska? Ten post edytował anita 11.02.2007, 17:25:59 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 18.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Użyć
i przelecieć pętlą jeszcze raz -------------------- emiker
|
|
|
![]()
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%) ![]() ![]() |
Najlatwiej 2 zapytania. No chyba ze otrzymujesz rekordy i wtedy 2x petle robic.
-------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
@SongoQ: Chodzi tutaj o kilka tysięcy rekordów, a na dodatek potrzebuję oprócz nazwiska i imion również innych właściwości, więc tworzenie kilkunastu zapytań chyba nie jest najlepszym rozwiązaniem.
Teoretycznie zapytanie przetwarzające 50000 rekordów nie trwa długo, więc nie wiem czy jednak nie skłonić się do kilku zapytań. @DjKermit: Wywołując następujące zapytanie
otrzymuję (phpmyadmin) naprzemienną listę nazwisk i imion: Kowalski: 8 Nowak: 5 Wojtek: 4 Ania: 2 Chcąc zrobić drugą listę (tylko nazwiska) wg.
nic nie dostaje, chociaż powinno być ok, bo gdy wywołuję w ten sam sposób imiona (w pierwszej pętli) jest wszystko OK. Przypomnę, że chcę osiągnąć wynik w formie: Kowalski: 8 Nowak: 5 Zaporowska: 2 -------- a następnie imiona Wojtek: 4 Ania: 2 Krzysztof: 1 Czy UNION to jest dobre rozwiązanie? Ten post edytował anita 11.02.2007, 20:05:07 |
|
|
![]()
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 więc tworzenie kilkunastu zapytań chyba nie jest najlepszym rozwiązaniem. Zgadzam sie. To moze tak jak pisalem wczesniej zrob to w petli. Wyciagasz imiona i nazwiska w jako UNION a nastepnie w 2 petlach sobie rozdzialach wedlug typu nazwisko i imie itd. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zgadzam sie. To moze tak jak pisalem wczesniej zrob to w petli. Wyciagasz imiona i nazwiska w jako UNION a nastepnie w 2 petlach sobie rozdzialach wedlug typu nazwisko i imie itd. Przekonałam się, że UNION jako łączenie zapytań nic nie wskóra, bo w wynikach zawsze dostanę tylko 2 kolumny gdzie w pierwszej jest Nazwa, a w drugiej Count(), a w żaden sposób nie rozróżnię imion od nazwisk, by później je umieścić w różnych pętlach. Ciekawi mnie jak wygląda zapytanie sql na Amazon.com gdzie widzimy w kategorii coś takiego: Narrow by Category Media Center (47) Thin & Light (35) Narrow by Brand Hewlett-Packard (1363) Fujitsu Siemens Computers (1359) Lenovo (879) Narrow by Seller PAC Computers (563) Computer Brain (277) ANTOnline (277) |
|
|
![]()
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%) ![]() ![]() |
Odnosnie przykadu to podejrzewam ze sa 2 zapytania 1 to typ a 2 to produkty.
Odnosnie UNION to mozna tak zrobic
Jak wyciagasz dane:
W jednej tablicy masz imiona a w 2 nazwiska -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 380 Pomógł: 2 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
w tabeli jest 250 000 rekordow w ukladzie
id | jakisHash rekordy zliczamy wg ciagu pierwszy + ostatni znak hasha, wersja ktora proponujecie z php, czyli w petli mamy: wykonuje sie nieco powyzej 1,5 sekundy, to samo tylko wykonane jeszcze na bazie mysql: wykonuje sie ok 0.5 sekundy, przy wiekszej liczbie zapytan roznica w czasie wykonywania skryptu bedzie wynosila kilka sekund na niekorzysc php. Najprosciej zrobic sobie w ten sposob testy wydajnosciowe, wystarczy napisac dwa skrypty ktore robia to samo, z tym ze jeden przetwarza dane dopiero w php a drugi juz na etapie pobierania danych z bazy. -------------------- Wybierasz się do Zakopanego? Odwiedź Willę Pod Górami. Następnym razem na pewno do niej wrócisz :)
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 157 Pomógł: 0 Dołączył: 12.02.2007 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Powyższe nie zadziała ![]() ![]() ![]() ![]() ![]() ![]() -------------------- ------
Per Aspera Ad Astra |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 9.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
a jak to posortowac wg ilosci imion..? np. Marek : 4 Jurek : 2 Monika :1 Piotr : 1
sortuje ale.. gina indexy z imionami.. 0:3 1:3 2:2 3:1 4:1 |
|
|
![]()
Post
#19
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 9.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
tylko ze w tym wypadku mamy jedna kolumne.. kod ma za zadanie obliczyc ile razy jest dany wpis.. w kolumnie i te zliczone rekordy z przypisanymi liczbami na posortowac..
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.04.2025 - 06:12 |