gpt4 book ai didi

php - 选择一个随机行,其中一个字段不等于并且另一个字段不在另一个表中

转载 作者:行者123 更新时间:2023-11-29 21:53:37 25 4
gpt4 key购买 nike

我有两张 table 。在表A中,我将文件名存储在其中一列中。我还将该文件名存储在 tableB 中。文件由登录用户上传,其名称存储在表 A 中。我实际上想做的是从 tableA 中选择一个随机行,其中文件名不在 tableB 中,并另外从 tableA 中仅选择没有登录用户用户名的行。

我下面的代码可以工作,但我不知道如何让它从结果中排除具有登录用户用户名的行:

$sql = "SELECT columnA FROM TableA LEFT JOIN tableB on TableA.columnA = tableB.columnB 
WHERE tableB.columnB IS NULL ORDER BY RAND() LIMIT 1";

我尝试在 IS NULL AND username != $loggeduser 之后添加(其中保存已记录的用户名),但它不起作用。

我还读到,如果有很多行,ORDER BY RAND() LIMIT 1 会非常慢。是否也可以针对这种情况改进我的选择代码?

非常感谢:)

最佳答案

您需要将 sql 语句中的 $loggedUser 用单引号 (') 封装起来,因为它是一个字符串:

$sql = "SELECT columnA FROM TableA LEFT JOIN tableB on TableA.columnA = tableB.columnB WHERE tableB.columnB IS NULL AND username != '$loggeduser' ORDER BY RAND() LIMIT 1";

希望您在使用 mysqli_real_escape_string() 的 sql 语句中使用 $loggedUser 的内容之前正确转义它的内容。 (或用于连接 mysql 服务器的模块中可用的其他类似功能/方法)。

您也认为 rand() limit 1 的 order 扩展性很差。我会用三步法来代替它:

  1. 使用 count() sql 函数获取符合您的条件(tableB.columnB IS NULL AND username != '$loggeduser')的记录数。

  2. 在 php 中生成一个介于 0 和步骤一中获得的数字 -1 之间的随机数。

  3. 通过在再次包含原始选择条件的查询的 limit 子句中使用上述随机数来选择随机记录: select ... where tableB.columnB IS NULL AND username != '$loggeduser' limit $randomNumber, 1

关于php - 选择一个随机行,其中一个字段不等于并且另一个字段不在另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391066/

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