php - LEFT JOIN 在 'on 子句中返回不唯一的表/别名和未知列

标签 php mysql join

我有一个 PHP 网站,其中有一个表,该表通过带有输入框的表单打印 MySQL 数据库中的搜索结果。我使用这个 SQL 语法,效果很好。我可以在一个字段中搜索以获取 location.room_name 和 users.user_name 的结果:

选择:

SELECT computers.*, location.room_name AS location
FROM computers
LEFT JOIN location ON computers.location = location.id
LEFT JOIN users ON computers.user_1 = users.id".
" ".$searchCriterias."
ORDER BY id

地点:

$searchCriterias =
    "WHERE 
        location.room_name LIKE '%".$s."%' OR
        users.user_name LIKE '%".$s."%'
    ";

$s 是搜索表单中的字符串。

问题是我有computers.user_1、computers.user_2和computers.user_3,它们都对应于上面的语法中的users.id。当我搜索用户名时,我想将其与 user_1、user_2 和 user_3 匹配,但我无法让它工作。我只能将其与一个(在本例中为 user_1)匹配。

我尝试在computers.user_2 = users.id上添加LEFT JOIN用户并收到此错误消息:不唯一的表/别名:'users'

还有...

LEFT JOIN users AS u1 ONcomputers.user_1 = users.id 对于所有三个并获取此消息:“on 子句”中的未知列“users.id”。

为什么不起作用?

最佳答案

正如您所说,computers 表中有 3 列,然后在连接时尝试执行以下操作。还添加了 GROUP BY 以获得每个用户的唯一结果。

$query = "SELECT computers.*, location.room_name AS location
          FROM computers
          LEFT JOIN location ON computers.location = location.id
          LEFT JOIN users ON (computers.user_1 = users.id 
                   OR computers.user_2 = users.id 
                   OR computers.user_3 = users.id ) ".
          $searchCriterias . " GROUP BY users.id ORDER BY id";

关于php - LEFT JOIN 在 'on 子句中返回不唯一的表/别名和未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596446/

相关文章:

php - 更新功能不更新,为什么没有传递 ID?

php - 如何查询表并输出平均值、总和、位置、

php - 从 PHP 代码调用存储过程是否可以防止 SQL 注入(inject)?

mysql - JOIN 有 IF 条件吗?

sqlite - 在 SQLite 中,如何进行 Join 避免列中的特定重复

apache-spark - 处理多个水印的 Spark 策略

php - 使用 PHP/Joomla 以编程方式将 MySql 数据库导出到 CSV

php - LIKE MySQL 搜索周围的空格

python - 将日期时间字符串转换为日期时间

mysql - 正确的 mysql 列类型可以保存 100k 长度的字符串吗?