SELECT SUM(a.situacao =2 OR a.situacao =0) AS cotacoes,
SUM(a.situacao =1) AS n_publicar,
SUM(a.inicio <= NOW() AND DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) >= NOW() AND a.situacao =2) AS disputa,
SUM(a.inicio > NOW() AND a.situacao =2) AS agendados,
SUM(DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) <= NOW() AND a.situacao =2 AND a.id_vencedor = -2) AS analise,
SUM(a.prazoi > NOW() AND a.situacao =2 AND a.id_vencedor >0) AS aguardando_execucao,
SUM(a.situacao =0) AS cancelados,
SUM(DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) <= NOW() AND a.situacao =2 AND a.id_vencedor = -3) AS fracassados,
SUM(a.prazot < NOW() AND a.situacao =2 AND a.id_vencedor >0 AND (b.id_avaliacao IS NULL OR b.id_avaliacao = '')) AS avaliacao,
SUM(a.situacao =2 AND a.id_vencedor >0 AND a.prazot > NOW() AND a.prazoi <= NOW()) AS execucao
FROM leilao_pregoes a
LEFT JOIN leilao_avaliacao b ON a.id_pregao = b.id_pregao AND b.situacao = 1
INNER JOIN leilao_edital c ON a.id_edital = c.id_edital
WHERE c.id_comprador =1
Ich weiß, dass diese verbessert werden kann ...optimieren diese langsame mysql query
Beginnen Sie mit der Formatierung, damit Sie und andere Menschen es verstehen können. –
Das wird eine ziemlich offene Frage sein, weil Sie so viel in einer Aussage machen, und wir haben nicht alle erforderlichen Informationen, z.B. Datentypen, Anzahl der Einträge usw. Aber so oder so könnten Sie mit einer gewissen Umformatierung umgehen. – LordWilmore
Zur Verbesserung der Abfragezeit sollten Sie ** Indizes ** hinzufügen, die für diese Abfrage nützlich sind. Ich glaube, dass die Abfrage selbst nicht verbessert werden kann (oder mysql sollte das im schlimmsten Fall für Sie tun), aber Sie tun nichts Verrücktes, soweit ich das beurteilen kann. Indizes für die Attribute, die Sie in den Join-Bedingungen und in der Where-Klausel verwenden. – Jakumi