我有2个mysql表,
第一个表保存有关文件的数据(包括文件夹ID)
第二个表保存有关文件夹的数据
我想选择每个用户的文件,我还需要包含文件夹名称,该名称保存在第二个表格中。
所以我需要以某种方式加入这些表格。
`file_id` int(20) NOT NULL AUTO_INCREMENT,
`FILE_NAME` varchar(200) NOT NULL,
`FILE_SIZE` varchar(200) NOT NULL,
`FILE_TYPE` varchar(200) NOT NULL,
`file_added` datetime DEFAULT NULL,
`share_type` varchar(200) NOT NULL,
`folder_id` int(20) NOT NULL,
`u_id` int(11) NOT NULL,
`folder_id` int(20) NOT NULL AUTO_INCREMENT,
`folder_name` varchar(200) NOT NULL,
`u_id` int(11) NOT NULL,
所以我需要能够选择:file_name(table1),file_size(table1),folder_name(table2)
我尝试了很多东西,比如这个敌人的例子:
SELECT files.file_name, files.file_size, folders.folder_name
FROM files
JOIN folders ON files.u_id = folders.u_id
WHERE
files.u_id = ?
AND folders.u_id = ?
ORDER BY folders.folder_name, files.file_name
但是只返回多行文件,最后每个文件夹名称
我有多远?
答案 0 :(得分:1)
两个表之间的加入列通过folder_id
与u_id
(我假设与用户所有权有关)来关联它们。
查询中的WHERE
子句可能是不必要的,是尝试使用隐式连接的工件。现在,完全删除WHERE
子句并更正连接ON
条件。当使用旧式隐式连接(WHERE
子句中的逗号分隔表)时,使用FROM
条件来关联两个表,但这似乎不是您在此处所做的。< / p>
在任何情况下,明确的JOIN
都是现代的首选语法。
将您需要的任何WHERE
条款添加回过滤集。
SELECT
files.file_name,
files.file_size,
folders.folder_name
FROM
files
JOIN folders ON files.folder_id = folders.folder_id
ORDER BY
folders.folder_name,
files.file_name
答案 1 :(得分:0)
因为它是一个非常直接的查询。我不打扰JOIN语法。 INNER EN OUTER JOINS有地方。但在这里,文件总是有一个文件夹(我假设)。
SELECT
A.file_name, A.file_size, B.folder_name
FROM
files A, folders B
WHERE A.folder_id = B.folder_id
A&amp; B是表别名
答案 2 :(得分:0)
您应该使用folder_id字段连接表。试试这个变种:
SELECT files.file_name, files.file_size, folders.folder_name
FROM files
JOIN folders ON files.folder_id = folders.folder_id AND files.u_id = ? ORDER BY folders.folder_name, files.file_name
答案 3 :(得分:0)
SELECT files.file_name, files.file_size, folders.folder_name
FROM files
INNER JOIN folders ON files.u_id = folders.u_id AND files.FOLDER_ID = folders.Folder_ID
ORDER BY folders.folder_name, files.file_name
答案 4 :(得分:0)
Select files.*, folders.folder_name from files join folders on folders.folder_id = files.folder_id where files.u_id = USERID