Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ile można dać max zapytań
Forum PHP.pl > Forum > Bazy danych > MySQL
Taz40
Witajcie. Montuje kolejny dział na swoją stronę (linki). Wszystkie dane będą w bazie. Teraz na głównej stronie działu jest 14 kategorii i chciałbym aby przy każdej z nich widniała liczba aktualnych rekordów w danej kategori. Wedle tego co sobie wymyśliłem to muszę zapytać baze 14 razy zeby otrzymać te wyniki. Wszystkie linki sa w jednej tabeli a sortuje je poprzez np.
Kod
WHERE cat='shop'

Oto moje zapytanie do bazy:[php:1:b3db10b368]<?php
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='game'");
$num_game = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='fun'");
$num_fun = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='hobby'");
$num_hobby = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='music'");
$num_music = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='cdr'");
$num_cdr = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='news'");
$num_news = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='portal'");
$num_portal = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='soft'");
$num_soft = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='net'");
$num_net = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='pl'");
$num_pl = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='komp'");
$num_komp = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='driver'");
$num_driver = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='tour'");
$num_tour = mysql_num_rows($result);
$result = mysql_db_query($dbname, "SELECT * FROM site_links WHERE cat='shop'");
$num_shop = mysql_num_rows($result);
?>[/php:1:b3db10b368]
na pierwszy rzut oka troche duzo tego a pozatym slyszalem ze zbyt wiele zapytan "zabija" MySQL'a. Mozecie to potwierdzić? Jesli tak to w jaki sposób to zoptymalizowac?
Jabol
połącz je za pomocą OR i potem order by cat
Taz40
Mógłbyś rozwinąć myśl, bo nie za bardzo kojarze.
Jabol
zrób to jednym selectem i wszystkie warunki połącz w jeden za pomocą or. Potem daj 'order by cat', rzeby się posortowały tak jak chcesz.
Taz40
Do posortowania to owszem, ale jak do kazdej z kategorii policze wiersze?
Jabol
to zrób tak[sql:1:1bb0194447]SELECT COUNT(cat) FROM site_links GROUP BY cat;[/sql:1:1bb0194447]sorry, trochę Cie źle przedtem zrozumiałem

//boże... o czym ja myślę dzisiaj??
maggot
1. Jezeli tylko chcesz poznac liczbe rekordow to lepiej pisac
[sql:1:826a4c97d2] SELECT COUNT(*) FROM ...[/sql:1:826a4c97d2]
bedzie o wiele szybciej, bo po co pobierac dane (*), ktorych nie bedziemy uzywac

2. zapytanie, ktorego potrzebujesz wyglada mniej wiecej tak
[sql:1:826a4c97d2] SELECT COUNT(*) FROM tabela GROUP BY cat[/sql:1:826a4c97d2]

3. Dobrym zwyczajem jest zrobic dodatkowa tabele 'kategorie' i potem w linkach podawac tylko id_kategorii
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.