使这部分PHP代码更快

时间:2013-08-26 18:03:30

标签: php mysql sql join

我有一部分代码没有那么优化。

LEFT JOIN可能会让它更快。但是我对这种高级查询有些麻烦。

我想使用带有NULL值的LEFT JOIN(http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/)来查询第一个cicle。

这是代码的一部分:

$query = "SELECT * FROM SitiWeb_Categorie WHERE MaxArticoliConLinks > 0";
$result = mysql_query($query, $db);
while($row = mysql_fetch_array($result))
{
    $Disponibile = 0;
    //Trovo tutti gli articoli redatti ed assegnati a questa categoria
    //Verifico inoltre che non è presente nella tabella delle pubblicazioni
    $query2 = "SELECT Articolisti_Articoli.ID AS ArticoloID FROM Articolisti_Articoli, Articolisti_Incarichi WHERE Articolisti_Incarichi.CategoriaID = '$row[ID]' AND Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID ORDER BY Articolisti_Articoli.ID DESC";
    $result2 = mysql_query($query2, $db);
    while($row2 = mysql_fetch_array($result2))
    {
        $query3 = "SELECT COUNT(ID) AS Tot FROM SitiWeb_Articoli WHERE ArticoloID = $row2[ArticoloID]";
        $result3 = mysql_query($query3, $db);
        $row3 = mysql_fetch_array($result3);
        if($row3[Tot]==0)
        {
            $Disponibile++;
        }
        if($Disponibile==10)
        {
            break;
        }
    }
    if($Disponibile<10)
    {

    }                               
}

1 个答案:

答案 0 :(得分:0)

由于您有相关的表SitiWeb_CategorieArticolisti_Articoli,因此您可以使用此查询:

SELECT 
    SitiWeb_Categorie.*,
    Articolisti_Articoli.ID
FROM 
    SitiWeb_Categorie
LEFT JOIN
    Articolisti_Articoli
ON
    Articolisti_Incarichi.CategoriaID=SitiWeb_Categorie.ID
INNER JOIN
    Articolisti_Incarichi
ON
    Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID
WHERE
    SitiWeb_Categorie.MaxArticoliConLinks > 0
ORDER BY
    Articolisti_Articoli.ID DESC