поиск из первой таблицы сумма из второй таблицы

#php #mysql

#php #mysql

Вопрос:

У меня есть форма для поиска, пользователь может ввести любое буквенное слово и выполнить его поиск этот поиск находится в двух таблицах таблица 1 содержит ли tbl_project эта таблица

 db_projectname db_location db_client  
xxxx              vvv      ccc

dddd              ggg      tttt
  

tbl_activities содержат

 db_projectname  db_cost  db_name   
xxxx             500     ttt
xxxx             500     hhh
dddd             200     llll
  

я использую этот php-код для выполнения моего поиска

 $sq = ""; 
$qq=array();
    if(isset($_POST['search']) amp;amp; !empty($_POST['search'])){  
    $search =  mysqli_real_escape_string($conn,$_POST['search']); 
    $qq[] = "tbl_project.db_projectname like '%".$search."%' ";  
    $qq[] = "tbl_project.db_location like '%".$search."%' ";
    $qq[] = "tbl_project.db_client like '%".$search."%' ";
    $qq[] = "tbl_project.db_offer like '%".$search."%' ";    
    $qq[] = "tbl_project.db_sheet like '%".$search."%' ";
    $qq[] = "tbl_project.db_invoice like '%".$search."%' ";
    $qq[] = "tbl_project.db_po like '%".$search."%' ";
    $qq[] = "tbl_project.db_id like '%".$search."%' ";    
    } 
$second=true;
       foreach($qq as $que){  
        if($second){  
        $sq .= " where ".$que;      
        $second = false;  
        }else{  
        $sq .= " or ".$que;          
        }} 
  

результат должен быть таким, если пользователь вводит x или v или c или xxxx или vvv или ccc

xxxx 1000 vvv cccc

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

 SELECT  tbl_project.* 
      , (SELECT  sum(tbl_activities.db_totalcost) AS total_cost FROM tbl_activities {$sq}
FROM tbl_project
  

Ответ №1:

Попробуйте этот подход:

 $cond = "";
if(isset($_POST['search']) amp;amp; !empty($_POST['search'])){  
    $search =  mysqli_real_escape_string($conn,$_POST['search']); 
    $cond .= " and pa.db_projectname like '%".$search."%' ";  
    $cond .= " and pa.db_location like '%".$search."%' ";
    $cond .= " and pa.db_client like '%".$search."%' ";
    $cond .= " and pa.db_offer like '%".$search."%' ";    
    $cond .= " and pa.db_sheet like '%".$search."%' ";
    $cond .= " and pa.db_invoice like '%".$search."%' ";
    $cond .= " and pa.db_po like '%".$search."%' ";
    $cond .= " and pa.db_id like '%".$search."%' ";    
} 
  

И запрос будет:

 select p.*,sum(pa.db_totalcost) from tbl_project p left join 
tbl_activities pa on p.db_projectname=pa.db_projectname 
where 1 $cond group by p.db_projectname
  

Ответ №2:

Я думаю, вы хотите что-то подобное:

 SELECT p.db_projectname, IFNULL(a.total, 0) as total, p.db_location, p.db_client FROM tbl_project as p
LEFT JOIN (select db_projectname, sum(db_cost) as total from tbl_activities group by db_projectname) as a
    ON p.db_projectname = a.db_projectname
  

Комментарии:

1. я получаю это сообщение Уведомление: неопределенный индекс: всего в C:wampwwworderprojectmanagmentallproject.php в строке 401 строка 401 выглядит так: $total_cost=$res[‘всего’];

2. @mohamadmohamad Извините, что для IFNULL не было псевдонима. Я обновил ответ.

3. извините, но это не сработало, это не дало мне того, что мне нужно, нет итога, и поиск неверен

4. я использую этот запрос, он дает нужный мне результат, но без общего КОЛИЧЕСТВА ВЫБЕРИТЕ tbl_project.db_id,tbl_project.db_projectname,tbl_project.db_location,sum(tbl_activities.db_totalcost) КАК total_cost ИЗ tbl_project СЛЕВА ПРИСОЕДИНИТЕ tbl_activities К tbl_project.db_projectname = tbl_activities.db_projectname {$sq} GROUP BY tbl_project.db_id порядок по db_iddesc

5. извините за общую, но не точную проблему поиска с именем проекта