Witam,

mam mały problem z wyszukiwarką otóż samo wyszukiwanie trwa około 2 sekund co jest dość długo, dlatego moje pytanie czy mój kod da się jakoś zooptymalizować. Tabela liczy około 20 tys rekordów.

Kontroler ->

  1. $array[0] = array('name'=>'programy', 'file'=> $this->Search_model->search_files($id, '8,7,6,18')); // Programy (magiczne 8,7,6 to nazwy kategorii)
  2. $array[1] = array('name'=>'spolszczenia', 'file'=> $this->Search_model->search_files($id, '4')); // Spolszczenia
  3. $array[2] = array('name'=>'sterowniki', 'file'=> $this->Search_model->search_files($id, '3')); // Sterowniki
  4. $array[3] = array('name'=>'gry', 'file'=> $this->Search_model->search_files($id, '5,13,17')); // Gry
  5. $array[4] = array('name'=> 'kody do gier', 'file'=> $this->Search_model->search_files($id, '10')); // Kody


Model ->

  1. $query = $this->db->query("SELECT SQL_CALC_FOUND_ROWS files.id, files.*,licenses.name as lname, MATCH(files.name,files.description) AGAINST ('{$string}' IN BOOLEAN MODE) AS score FROM files LEFT JOIN licenses ON licenses.id = files.license WHERE MATCH(files.name,files.description) AGAINST ('{$string}' IN BOOLEAN MODE) and files.main_cat IN ({$cat}) ORDER BY score DESC LIMIT 0,30");
  2. return $query->result_array();


Left join to powiązanie tabeli licencji z tabelą plików. Pytanie czy ktoś coś widzi i poradzi ? Wersja CodeIgnitera 2.02

OKEJ zrobiłem to tak i jest lepiej ma ktoś jeszcze lepszy pomysł ?:

  1. $array = $this->Search_model->search_files($id); // Programy
  2. $categories = array();
  3. foreach($array as $var)
  4. {
  5. $cid = $var['main_cat'];
  6. //jeśli nie było jeszcze danej kategorii pliku, to ją tworzymy
  7. if (!isset($categories[$cid])){
  8. $categories[$cid] = array('name' => $var['type'], 'pliki' => array());
  9. }
  10.  
  11. //dodajemy do kategorii kolejne produkty
  12. if (!empty($var['name'])) //jeśli istnieje produkt
  13. $categories[$cid]['pliki'][] = array('system_link' => $var['system_link'], 'type' => $var['type'], 'id' => $var['id'], 'description' => $var['description'], 'name' => $var['name'], 'grade'=> $var['grade'], 'downloads' => $var['downloads'], 'pl_link' => $var['pl_link'], 'recomend' => $var['recomend'], 'lname' => $var['lname'], 'language' => $var['language']);
  14. }
  15.  
  16. // MODEL:
  17.  
  18. function search_files($string)
  19. {
  20.  
  21. $query = $this->db->query("SELECT files.*,licenses.name as lname, MATCH(files.name,files.description) AGAINST ('{$string}' IN BOOLEAN MODE) AS score FROM files LEFT JOIN licenses ON licenses.id = files.license WHERE MATCH(files.name,files.description) AGAINST ('{$string}' IN BOOLEAN MODE) ORDER BY score DESC LIMIT 0,30");
  22. return $query->result_array();
  23.  
  24. }