我试图从2个mysql表中选择数据到1个查询

时间:2014-01-09 21:28:53

标签: php mysql sql

我有2个mysql表,

第一个表保存有关文件的数据(包括文件夹ID)

第二个表保存有关文件夹的数据

我想选择每个用户的文件,我还需要包含文件夹名称,该名称保存在第二个表格中。

所以我需要以某种方式加入这些表格。

表1 - 文件

`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,

表2 - 文件夹

`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

但是只返回多行文件,最后每个文件夹名称

我有多远?

5 个答案:

答案 0 :(得分:1)

两个表之间的加入列通过folder_idu_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