tengo tres mesas
proyecto_tbl
db_projectid db_projectname 1 test 2 xxxactividades_tbl
db_id db_projectid db_category 1 1 Civil Work 2 1 Mechanical 3 1 Electricaltbl_porcentajediario
db_dpid db_aid db_projectid db_status 1 1 1 red 2 1 1 3 2 1db_projectid es una clave principal en tbl_project
db_id es una clave principal y db_projectid es una clave externa en tbl_activities
db_dpid es una clave principal y db_aid es una clave externa en tbl_dailypercentage Intenté esta consulta
select activities.db_id, activities.db_category as cat, dailypercentage.db_status, dailypercentage.db_aid, dailypercentage.db_projectid from tbl_activities as activities,tbl_dailypercentage as dailypercentage where dailypercentage.db_projectid='$projectId' and activities.db_id=dailypercentage.db_aid and dailypercentage.db_status='red'pero tengo un error ab
Variable indefinida: gato
while($row=mysqli_fetch_array($statusQuery)){ $status=$row['db_status']; $cat=$row['cat']; } <td> <?php if($cat=="Civil Work" && $status="red"){ echo"<p style='color:$status'>".($sumcivil/$civilCount)."</p>";} else{echo ($sumcivil/$civilCount);}?> </td>También intento muchas cosas, la combinación izquierda y la combinación derecha.
tener el resultado que quiero
El resultado que quiero es
Para proyectos que tienen una identificación = 1
category status civil work red mechanical work electrical workPara proyectos que tienen una identificación = 2
category status civil work mechanical work electrical workMostraste este código:
while($row=mysqli_fetch_array($statusQuery)){ $status=$row['db_status']; $cat=$row['cat']; } Si su consulta no devuelve filas, $status y $cat nunca se definirán. Supongo que esto es lo que salió mal. ¿Qué sucede si ejecuta esa consulta con un cliente MySQL como phpMyadmin?
De manera similar, si su consulta devuelve más de una fila, $status y $cat capturarán los valores de solo la última fila.
Es importante averiguar lo que quiere que suceda sin filas y con varias filas.
Basado solo en las tablas de su pregunta, he elaborado el siguiente esquema (no he agregado restricciones a las claves externas, ya que esto es solo para probar).
create table tbl_project ( `db_projectid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `db_projectname` VARCHAR(255) NOT NULL DEFAULT 'Undefined', PRIMARY KEY (`db_projectid`) ); create table tbl_activities ( `db_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `db_projectid` INT(1) NOT NULL, `db_category` VARCHAR(255) NOT NULL DEFAULT 'Undefined', PRIMARY KEY (`db_id`) ); create table tbl_dailypercentage ( `db_dpid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `db_aid` INT(1) NOT NULL, `db_projectid` INT(1) NOT NULL, `db_status` VARCHAR(255) NULL, PRIMARY KEY (`db_dpid`) ); insert into tbl_project (db_projectname) values ('Test'), ('xxx'); insert into tbl_activities (db_projectid, db_category) values ('1', 'Civil Work'), ('1', 'Mechanical'), ('1', 'Electrical'); insert into tbl_dailypercentage (db_aid, db_projectid, db_status) values ('1', '1', 'red'), ('1', '1', null), ('2', '1', null); select a.db_category as cat, dp.db_status from tbl_project p left join tbl_activities a on p.db_projectid = a.db_projectid left join tbl_dailypercentage dp on dp.db_aid = a.db_id where p.db_projectid = 1 group by a.db_id; Tuve que agregar el group by en la consulta final, ya que tiene varias filas en tbl_dailypercentage con los mismos valores de db_aid y db_projectid .
Después de eso, desea modificar su código php, colocando las cosas td dentro del ciclo while :
<?php while($row=mysqli_fetch_array($statusQuery)):?> $status=$row['db_status']; $cat=$row['cat']; <td> <?php if($cat=="Civil Work" && $status="red"){ echo"<p style='color:$status'>".($sumcivil/$civilCount)."</p>";} else{echo ($sumcivil/$civilCount);}?> </td> <?php endwhile; ?>