[英]Gobbly php to usable SQL?
所以我需要幫助將PHP轉換為SQL。 這是當前代碼(不是我的代碼),它運行三個while循環,最終需要大約兩分半鍾才能運行。 顯然,效率不是很高。 我也知道這是舊的mysql用法,而不是較新的mysqli或PDO版本。
這是樣本數據的小提琴:
http://sqlfiddle.com/#!2/71c74
看着php,我認為這是查詢(使用SQL)。
SELECT z.siteID, us.id FROM groups g, usertogroup u, users z, usertosite us
WHERE g.entityID=$thisEntity
and u.groupID=2093 and z.id=userID
and site_id=3411 and user_id=$uid;
(替換為實際值)。
但這會在查詢只返回44時返回1000+行。那么這就是PHP,有人知道真正的查詢應該是什么樣子,或者也許是用PHP編寫此查詢的更好方法? $ uid是從超全局變量$ _SESSION中拉出的,因此已被設置。 與$ thisEntity相同,也從會話變量中提取。
$site_list3 = array();
$sql_str = "SELECT id FROM groups WHERE entityID=$thisEntity";
$sql_res = mysql_query($sql_str);
$row = mysql_fetch_array($sql_res, MYSQL_ASSOC);
while ($row) {
$passed = 1;
$sql_str2 = "SELECT siteID FROM usertogroup u,users z where groupID=" . $row['id'] . " and z.id=userID;";
$sql_res2 = mysql_query($sql_str2);
$row2 = mysql_fetch_array($sql_res2, MYSQL_ASSOC);
while ($row2) {
if ($thisEntity == 1761 && $row2['siteID'] == 3411) {
} else {
$sql_str3 = "SELECT id FROM usertosite WHERE site_id=" . $row2['siteID'] . " and user_id=$uid";
$sql_res3 = mysql_query($sql_str3);
$row3 = mysql_fetch_array($sql_res3, MYSQL_ASSOC);
if (!$row3)
$passed = 0;
}
$row2 = mysql_fetch_array($sql_res2, MYSQL_ASSOC);
}
if ($passed == 1)
{
$site_list3[] = (int) $row['id'];
}
$row = mysql_fetch_array($sql_res);
}
$site_list3_values = implode(", ", $site_list3);
似乎您缺少一個或多個JOIN子句。 沒有有效的方案,我只能猜測...但這行得通嗎?
SELECT
U.siteID,
US.id
FROM
groups G
JOIN usertogroup UG ON(UG.groupID=G.id) -- was missing?
JOIN users U ON(U.id=U.userID)
JOIN usertosite US ON(US.user_id=U.id) -- was missing?
WHERE
G.entityID = 12345
AND US.site_id = ABCDEF
AND ....
在可能的情況下,我個人更喜歡“ ON”條件而不是“ WHERE”表達式,因為我認為它使表之間的關系更加明顯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.