#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. извините за общую, но не точную проблему поиска с именем проекта