2015-09-10 3 views
1

У меня есть три таблицы master_category, category_group и статьи следующим
1) master_categoryЛучшая практика в MySql запросе с PHP

cat_id    cat_name 
------------------------------ 
1     Movies 
2     Hollywood 
3     Bollywood 
4     Hollywood Actress 
5     Hollywood Actors 
6     Mobiles 
7     Sony 
8     Apple 
9     LG 
10     Sony Accessories 

1) category_group

id    Main_Group   Sub_Group 
-------------------------------------------------- 
    1     1     2 
    2     1     3 
    3     2     4 
    4     2     5 
    5     6     7 
    6     6     8 
    7     6     9 
    8     7     10  
-------------------------------------------------- 

2) статьи

id     title     description 
---------------------------------------------------------------- 
    1     sample title    some description 

Таблица запись идет, как это, когда я нажимаю фильмы мне нужно, чтобы получить статьи содержат слово «фильмы», «Голливуд», «Болливуд», «голливудская актриса», «голливудский актер» и т.д. то есть (Подгруппа и к югу от подгруппы и т.д.)

я сделал, как этот

SELECT names.* FROM master_category mc LEFT JOIN category_group sC#level1 
ON sc.main_group = mc.cat_id LEFT JOIN category_group sc2 #level2 
ON sc2.main_group = sc.sub_group LEFT JOIN master_category names 
ON sc.sub_group = names.cat_id OR sc2.sub_group = names.cat_id 
where mc.cat_name = 'movies' order by names.cat_id; 

из этого запроса я могу получить cat_ имя

$ результат является массив мы получаем из этого результата запроса

$i=0; 
foreach($result as $row) 
{ 
    if($i!=0) { $query_condition.= "or "; } 
    $query_condition.= " title like '%".$row['cat_name']."%' or description like '%".$row['cat_name']."%'"; 
} 

это получить результат, как

$query_condition = " title like '%Movies%' or description like '%Movies%' or title like '%Bollywood%' or description like '%Bollywood%' or title like '%Hollywood%' or description like '%Hollywood%' or title like '%Hollywood Actress%' or description like '%Hollywood Actress%' or title like '%Hollywood Actor%' or description like '%Hollywood Actor%' 

тогда я написал окончательный запрос следующим образом

 select * from articles where $query_condition 

это лучшая практика? если у нас будет больше времени для получения конечного результата, то возрастет. есть ли другой лучший способ получить быстрый результат? пожалуйста, советы мне

+4

Лучшая практика будет использовать подготовленные заявления/связываемые переменные –

+0

я не знаю как это сделать, пожалуйста, помогите мне – Shameem

+3

Начните здесь, http://php.net/manual/en/pdo.prepared-statements.php или http://php.net/manual/en/mysqli.quickstart.prepared-statements .php в зависимости от вашего драйвера. – chris85

ответ

0

Это может помочь вам, как запросить базу данных, но вам нужно будет работать на его производительность

SELECT DISTINCT  
      a.title, 
      a.description 
FROM  articles a 
      INNER JOIN 
      (
       SELECT (@clicked_cat_id := cat_id) cat_id, 
        cat_name 
       FROM master_category 
       WHERE Upper(cat_name) = Upper(@clicked_cat_name := "Movies") 
       UNION 
       SELECT  b.cat_id, 
         b.cat_name 
       FROM  master_category b 
         INNER JOIN category_group c 
          ON b.cat_id = c.sub_group 
       WHERE  c.main_group = @clicked_cat_id) c 
WHERE  a.title LIKE concat('%',c.cat_name,'%') 
Смежные вопросы