使用INNER JOIN选择DISTINCT

时间:2014-05-31 13:25:55

标签: mysql sql

大家好,
这听起来很简单,但我在这里遇到了问题。

有桌子:

table_A
TA_id | TA_user | TA_hour | TA_date

table_B
TB_id | TB_name | TB_adress

以下是查询:

$sql = mysql_query("SELECT 
                    DISTINCT TA_user 
                    FROM table_A 
                    INNER JOIN table_B ON table_B.id = table_A.TA_user 
                    WHERE TA_date LIKE '%$vardate%' 
                    ORDER BY TA_user ASC ");

当我在数组中运行While循环时,shdud打印的TB_name导致内部连接不起作用。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

在我看来,对于给定的表B实体,您有多个表A记录,是吗?

顺便说一下,你的列名很可怕...... table_B.id = table_A.TA_user ????如何检查你的数据库谁应该知道这种关系存在?但这不是重点。

无论如何,我猜你是否试图在给定日期返回table_A中有记录的表B实体?

如果是这样,不同应该适合你。我可能会使用group by,因为它通常更快。但如果我理解正确的话,这应该做你想要的。

SELECT DISTINCT table_B.TB_name
    FROM table_A 
        INNER JOIN table_B
            ON table_B.TB_id = table_A.TA_user
    WHERE TA_date LIKE '%$vardate%'
    ORDER BY TA_user ASC;

而且,正如@Gordon Linoff上面所说,带有日期字段的LIKE是可疑的。他的想法对我来说似乎很合适。

答案 1 :(得分:0)

首先,不要使用像“mysql_”这样的弃用接口。使用mysqli或PDO。但是,专注于您的查询:

SELECT DISTINCT TA_user
FROM table_A INNER JOIN
     table_B
     ON table_B.id = table_A.TA_user
WHERE TA_date LIKE '%$vardate%'
ORDER BY TA_user ASC;

一种可能性是连接键不正确。假设是,另一个大问题是使用like和日期。目前尚不清楚你想要什么,但我猜它是这样的:

SELECT DISTINCT TA_user
FROM table_A INNER JOIN
     table_B
     ON table_B.id = table_A.TA_user
WHERE TA_date = date('$vardate')
ORDER BY TA_user ASC;

您希望$vardate采用“YYYY-MM-DD”格式,以确保正确转换。或者,更好的是,将其设为参数而不是嵌入常量。

答案 2 :(得分:0)

我达成了这笔交易:$sql = mysql_query("SELECT * FROM table_A INNER JOIN table_B ON table_B.id = table_A.TA_user WHERE TA_date LIKE '%$vardate%' GROUP BY TA_user ");