¿Cómo realizar estas dos consultas de MySQL en PHP y obtener una tabla con los resultados?

publicado por: Anonymous

Nunca he usado este tipo de consulta y no sé como implementarla en php, pongo primero las tablas relacionadas con la consulta, y después la consulta que quiero usar en php. Gracias, un saludo.

Tabla: team_driver

Columna Tipo    Nulo Predeterminado Comentarios
id      int(11) No      
team    int(11) No   0  
driver  int(11) No   0

Ejemplo:

id  team driver
104 26   1

tabla: race_driver

Columna      Tipo       Nulo Predeterminado Comentarios
race         int(11)    No   0  
team_driver  int(11)    No   0  
grid         int(11)    No   0  
position     int(11)    No   0  
fastest_lap  tinyint(1) No   0  
laps         int(11)    No   0  
time         int(11)    No   0  
status       int(11)    No   0

Ejemplo:

race team_driver grid position fastest_lap laps time    status
26   104         6    3        0           20   2588975 0
23   104         1    1        1           15   1946151 0
22   104         6    5        0           27   2473936 0

Tabla: driver

Columna      Tipo         Nulo Predeterminado Comentarios
id           int(11)      No        
name         varchar(30)  No        
driver_photo varchar(200) No

Ejemplo:

id  name  driver_photo
1   Spark http://spark.byethost17.com/prem/uploads/spark.png

Creando una vista con todos los resultados y contando solo los top 3 identificados por su ID de team driver:

CREATE VIEW team_driver_top3 AS
SELECT team_driver,
sum(case when position = 1 then 1 else 0 end) as position_1_count,
sum(case when position = 2 then 1 else 0 end) as position_2_count,
sum(case when position = 3 then 1 else 0 end) as position_3_count
from race_driver
group by team_driver
order by position_1_count desc

Sumando los resultados:

SELECT name,
SUM(position_1_count) AS pos_1,
SUM(position_2_count) AS pos_2,
SUM(position_3_count) AS pos_3 
FROM team_driver, team_driver_top3, driver 
WHERE (team_driver.id = team_driver_top3.team_driver AND team_driver.driver = driver.id) 
GROUP BY driver
ORDER BY pos_1 DESC, pos_2 DESC, pos_3 DESC;

Reedito para responder y aclarar conforme se me ha pedido en los comentarios:

Cuando pregunto es porque ya lo he intentado por mi cuenta con mis limitados conocimientos. El problema que tengo es la sintaxis, y quizás que en php hay que hacer algo más de código para conseguir los resultados.

No es un formulario, es solo una consulta que muestra una tabla. Le he dado mil vueltas durante meses, y la mejor forma de obtener una tabla que me sume los podiums (positions) es esa, como me ayudaron me falta el paso de hacer funcionar la consulta en php, ya que no es de las que esté habituado a ver. https://github.com/arv187/PREM-Podium-race-E-manager/issues/28

El código que obtengo en phpmyadmin al seleccionar “obtener código php”:

$sql = "SELECT team_driver,n"
. " sum(case when position = 1 then 1 else 0 end) as position_1_count,n"
. " sum(case when position = 2 then 1 else 0 end) as position_2_count,n"
. " sum(case when position = 3 then 1 else 0 end) as position_3_countn"
. "from race_drivern"
. "group by team_drivern"
. "order by position_1_count desc LIMIT 0, 30 ";

Cuando formateo correctamente el código por ejemplo eliminando n obtengo un error T_string select team_driver. Hablo de memoría porque no recuerdo los detalles desde esta mañana y revertí los cambios al darme ese error. Cuando he buscado php sql he visto cosas que no entendia, así que no me sirvió de mucho, ni siquiera sé a que se referían con usar ajax. Así que al final publiqué aquí como último recurso, porque sé que es complicado obtener una respuesta concreta si se pregunta.

Vamos que creo que varios meses y 5 horas hoy intentando aplicar la consulta debería tenerse en cuenta para comprender que no doy más de mí y necesito ayuda xD.

Gracias por las respuestas, un saludo!.

solución

Bueno, pues gracias por no ayudarme y marearme con que si código obsoleto, intentar meterme en historias de PDO, volver a hacerme repetir comprobaciones que ya había hecho y ni diciéndolo se dejaba de repetir que volviera a hacerlo… todo menos darme una solución.

En lo que va de año con esta ya fueron dos ocasiones en las que pedí ayuda y no conseguí solución.

Eso sí, muchisimas gracias por vuestras respuestas y dedicar vuestro tiempo a responder e intentar ayudar.

Aquí está la solución:

<? if (!defined("CONFIG"))
    exit();

$sql_drivers = "SELECT name, driver_photo,
    SUM(position_1_count) AS pos_1,
    SUM(position_2_count) AS pos_2,
    SUM(position_3_count) AS pos_3
FROM team_driver, team_driver_top3, driver
WHERE (team_driver.id = team_driver_top3.team_driver AND team_driver.driver = driver.id)
GROUP BY driver
ORDER BY driver.name ASC;";
$exe_drivers = mysql_query($sql_drivers);
if (!$exe_drivers) {
    show_error("MySQL Error: " . mysql_error() . "n");
    return;
}
?>

Además se crea esta tabla en la base de datos:

CREATE OR REPLACE VIEW `team_driver_top3` AS
SELECT `race_driver`.`team_driver` AS `team_driver`,
  sum((case when (`race_driver`.`position` = 1) then 1 else 0 end)) AS `position_1_count`,
  sum((case when (`race_driver`.`position` = 2) then 1 else 0 end)) AS `position_2_count`,
  sum((case when (`race_driver`.`position` = 3) then 1 else 0 end)) AS `position_3_count`
FROM `race_driver`
GROUP BY `race_driver`.`team_driver`
ORDER BY pos_1 DESC, pos_2 DESC, pos_3 DESC;";
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *