Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Optymalizacja zapytania SQL w skrypcie PHP
yalus
post
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

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


Witam,

czy można jakoś zoptymalizować poniższe działanie skryptu php, zastanawiam się jakby to zrobić:


tabele:

users
id | imie | nazwisko |
------------------------
1 | jan | kowalski |


users_images
users_id | image |
-----------------------
1 | img1.jpg
1 | img2.jpg
1 | img3.jpg



  1. function get_total_images($we)
  2. {
  3. $sql="select users_id, count(*) from users_images where users_id = ".$we;
  4. $result1 = mysql_query($sql);
  5. $row = mysql_fetch_array($result1);
  6. return $row[1];
  7. }
  8.  
  9.  
  10. $sql = "select * from users";
  11.  
  12. $result = mysql_query($sql);
  13.  
  14. while ($row = mysql_fetch_array($result))
  15. {
  16. echo "Imie: ".$row['imie']."<br>Nazwisko: ".$row['nazwisko']."<br>Ilość zdjęć: ".get_total_images($row['id']);
  17. }




niby to jakoś działa ale przez zastosowanie funkcji get_total_images zwiększa mi się liczba zapytań do bazy bo każdy wyświetlany rekord "odpytuje" baze ile dany użytkownik ma zdjęć

np.
mając 1000 użytkowników i chcąc ich wyświetlić to w pętli WHILE muszę odpalić 1000 razy jedno zapytanie aby sprawdzić ile posiadają zdjęć (IMG:style_emoticons/default/facepalmxd.gif)


czy dało by się użyć tylko jednego zapytania sql aby wyświetlić użytkowników oraz liczbę zdjęć?


pozdrawiam



Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
yalus
post
Post #2





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

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


userow jest 43000

  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `first_name` char(50) DEFAULT NULL,
  4. `last_name` char(25) DEFAULT NULL,
  5. `email` char(25) DEFAULT NULL
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `id` (`id`),
  8. UNIQUE KEY `email` (`email`),
  9. UNIQUE KEY `profile_name_2` (`profile_name`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin2



a zdjec 82000

  1. CREATE TABLE `images` (
  2. `users_id` int(11) DEFAULT NULL,
  3. `images` char(100) DEFAULT NULL
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin2



a czy z indeksami można coś pozmieniac w tych tabelach?



Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 17:05