MySQL JOIN:字符串没有返回

时间:2010-11-20 12:50:14

标签: mysql string select

我正在使用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
)

忽略这里的数字索引 - 我对命名数据感兴趣。字段bodytitle是文本字段(CHAR()),显然不会显示它们应该是什么时候。

我做错了什么或错过了什么?是因为我正在使用CHAR()吗?我强烈怀疑它,但我对MySQL不太满意。

修改

此查询的想法是从一个表(tf_threads)中选择所有线程,并从另一个表(tf_posts)获取该线程下的第一个帖子,并使用帖子title字段作为该线程的标题

谢谢,

詹姆斯

2 个答案:

答案 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表