gpt4 book ai didi

php - Gobbly php 到可用的 SQL?

转载 作者:行者123 更新时间:2023-11-29 03:02:43 25 4
gpt4 key购买 nike

所以我需要帮助将 PHP 转换为 SQL。这是当前代码(不是我的),它运行三个 while 循环,最终运行大约需要两分半钟。显然,效率不是很高。我也知道这是旧的 mysql 用法,而不是较新的 mysqli 或 PDO 版本..

这是示例数据的 fiddle :

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 相同,也是从 session 变量中提取的。

$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”表达式,因为我认为它使表之间的关系更加明显。

关于php - Gobbly php 到可用的 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com