让这部分PHP代码更快


Make this part of PHP code faster

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

也许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)
    {
    }                               
}

由于有相关的表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