Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] policzenie ilosci rekordow?
AndyPSV
post 1.02.2011, 23:54:44
Post #1





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


tak se myslalem

chodzi o to, ze mam tabele, niech bedzie REKORDY
w tabeli tej, mam dane o kategoriach

ID T C0 C1
1 moj_tytul 1/10 2/20

teraz, chce wyciagnac wszystkie rekordy, ktore maja T LIKE "%zmienna%"

jak teraz w tym momencie policzyc wszystkie rekordy; musze pobrac kazdy rekord, zsumowac ich ilosc, a nastepnie pobrac nazwe KATEGORII z oddzielnej tabeli czy jak to zrobic?

jak to jest zrobione na allegro albo ebayu?
nie wywali sie baza jak bedzie np. 1 mln rekordow?
jak to rozwiazac?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
kulczycki
post 2.02.2011, 08:04:46
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


http://php.net/manual/en/function.mysql-num-rows.php
Go to the top of the page
+Quote Post
Zyx
post 2.02.2011, 08:54:36
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Ale chodzi Ci o liczbę wierszy w całej bazie spełniającej ten warunek czy liczbę zwróconych w zbiorze wyników? Jeśli używasz stronicowania, a zakładam, że używasz, te wartości mogą być różne. Do zbioru wyników funkcję masz wyżej, do liczenia ogólnego musisz wysłać dodatkowe zapytanie korzystające z SQL-owej funkcji COUNT(). Jednak, jak słusznie zauważyłeś, liczenie w locie wszystkiego może być dość czasochłonne przy dużej bazie, dlatego często stosuje się optymalizacje polegające np. na zapisywaniu liczników bezpośrednio w polach wierszy. Niestety, jeśli chcesz korzystać z LIKE, wtedy takiego licznika nie wygenerujesz, bo musiałbyś trzymać jego wartości dla wszystkich możliwych ciągów, co nie wchodzi w grę smile.gif. Dlatego jedyna sensowna opcja dla Ciebie to skorzystanie z COUNT().



--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
thek
post 2.02.2011, 09:46:38
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Różnie ludzie oceniają skuteczność SQL_CALC_FOUND_ROWS, gdyż niektórzy twierdzą, że nie używa indeksów ( z LIKE to i tak traci znaczenie ), ale w tym wypadku mogło by się to sprawdzić.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
waqmaz
post 2.02.2011, 13:33:23
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.01.2011
Skąd: Murowana Goślina

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


pokaze ci to na przykladzie wyszukiwania w tabeli rekordow i przekazywania do pliku.php smile.gif
stworz sobie i textbox z wyrazeniem 'wyrazenie'.

  1. $zapytanie = "select * from tabela like '%".$wyrazenie."%'"; (tutaj moglem sie walnac bo niepamietam jak to dokladnie sie wybieralo z tym %) ; ) poradzisz sobie.
  2. $wynik = $db->query($zapytanie);
  3. $znalezionych = $wynik->num_rows;
  4. echo "<p>Ile znalazlo sie: ".$znalezionych."</p>";
  5.  
  6. for ($i=0; $i <znalezionych; $i++) {
  7. $wiersz = $wynik->fetch_assoc();
  8. ..wyswietlenie..z tablica.. np:
  9. echo "<p>".($i+1).". Tytuł: " . "</p>";
  10. }


czyli jak widzisz $wynik->num_rows; wskazuje na wiersze mozna w ten sposob sprawdzic czy juz cos istnieje i wystawic errora ze nie mozna dodac czegos o takiej samie nazwie bo taki numrows juz jest ;p np. w rejestarcji o heh haha.gif

Ten post edytował waqmaz 2.02.2011, 13:47:27
Go to the top of the page
+Quote Post
thek
post 2.02.2011, 15:01:09
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Taaa waqmaz... I pobranie z bazy miliona rekordów, by sobie to potem php policzył PO przesłaniu tych milionów jest super wydajne winksmiley.jpg Nawet localhost może się wysypać z pamięcią jeśli to będą duże tabele. Albo count(klucz_primary) albo SQL_CALC_FOUND_ROWS bo każda inna wersja odwali taką jazdę, że głowa Cię rozboli. Na chłopski rozum... Mieszkasz w Polsce i chcesz wiedzieć ile słoni jest w Afryce. Ściągasz je wszystkie do Polski i liczysz, czy każesz sobie przesłać od razu ich liczbę? Twój kod waqmaz każe zrobić to pierwsze biggrin.gif

AndyPSV... Tabela produktów JOIN z tabelą kategorii (może być poprzez tabelę złączeniową ) z warunkiem where i group by po id kategorii. Do tego w select robisz count(id_produktu). Ale oczywiście wszystko zależy od struktury tabel. Ja tylko zgaduję smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
AndyPSV
post 2.02.2011, 17:31:32
Post #7





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


skorzystam z http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

wczoraj sie nieco zamulilem, bo za duzo zrobilem wszystkiego - dzis juz wiem jak to rozwiazac, tak aby bylo super wydajnie i po prostu najlepiej

dzieki za pomoc

---

  1. $q = q('SELECT c0,c1,COUNT(*) as cnt FROM `'.PRFX.'x` WHERE '.$sql.' GROUP BY c0'); while($_d = f($q)) $d[] = $_d; var_export($d);# die;


Ten post edytował AndyPSV 2.02.2011, 18:22:35
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: 19.07.2025 - 09:52