我有一部分代码没有那么优化。
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)
{
}
}
答案 0 :(得分:0)
由于您有相关的表SitiWeb_Categorie
和Articolisti_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