我正在使用MySQL调用的MySQL查询:
SELECT tf_posts.*, tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id=54
当我使用mysql_fetch_array
时,我得到一个充满每个字段的数组,但字段的实际值确实非常奇怪......
任何数字或日期字段都可以正常返回;我可以在数组中使用它们。但是,任何文本字段都是空的。返回的数组如下所示:原始形式:
Array ( [0] => [id] => [1] => [thread_id] => 820515612 [2] => [poster_id] => [3] => [title] => [4] => [body] => [5] => [date] => [6] => [edit_date] => [7] => [edited] => [8] => [draft] => [9] => [spam] => [10] => 820515612 )
忽略这里的数字索引 - 我对命名数据感兴趣。字段body
和title
是文本字段(CHAR()
),显然不会显示它们应该是什么时候。
我做错了什么或错过了什么?是因为我正在使用CHAR()
吗?我强烈怀疑它,但我对MySQL不太满意。
修改
此查询的想法是从一个表(tf_threads)中选择所有线程,并从另一个表(tf_posts)获取该线程下的第一个帖子,并使用帖子title
字段作为该线程的标题
谢谢,
詹姆斯
答案 0 :(得分:1)
你的加入条款对我没有意义。看起来你正在尝试获取thread_id 54的所有帖子,但是你没有加入这两个表,并且你没有从thread_id获取tf_threads表中的任何数据,我认为这也存在于你的tf_posts中表。为什么不使用WHERE子句:
SELECT * FROM tf_posts WHERE thread_id = 54
如果这不起作用,请发布您的表格说明以及查询应返回的内容。
要回答您的编辑,您需要实际加入表格,如果您只需要一个帖子,则需要使用INNER JOIN - LEFT JOIN会为您提供每个帖子的所有帖子。
SELECT tf_threads.*, tf_posts.* FROM tf_threads INNER JOIN tf_posts
ON tf_threads.thread_id = tf_posts.thread_id
ORDER BY tf_posts.date ASC
这应该为每个线程提供所有线程和第一篇帖子(由日期列确定)。
答案 1 :(得分:0)
SELECT tf_posts。*,tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id = 54
看起来不对
ON子句应该使用两个表中的字段将两个表连接在一起
SELECT tf_posts。*,tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_posts.thread_id = tf_threads.thread_id 在哪里tf_threads.thread_id = 54
正如Thilo所说,如果你已经拥有了线程ID,那就用它来限制使用where子句的posts表