大家好,
这听起来很简单,但我在这里遇到了问题。
有桌子:
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导致内部连接不起作用。
有什么想法吗?
答案 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 ");