2010-11-20 115 views
0

我使用这个MySQL查询,由MySQL叫:当我使用mysql_fetch_array我得到一个全阵列的每个字段的MySQL的JOIN:字符串不返回

SELECT tf_posts.*, tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id=54

,但对于字段中的实际值确实表现得非常奇怪......

任何数字或日期字段返回就好;我可以在数组中使用它们。但是,任何文本字段都是空的。返回的数组显示如下为原始形式:

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字段线程的标题。

感谢,

詹姆斯

回答

1

您的加入条款没有道理给我。它看起来像你试图让thread_id 54的所有帖子,但你没有加入这两个表,并且你没有从tf_threads表中得到除thread_id以外的任何数据,我认为它也存在于你的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 

这应该会给你所有线程和每个线程的第一篇文章(由日期列确定)。

+0

请参阅我的编辑。谢谢。 – Bojangles 2010-11-20 13:01:54

+0

编辑我的答案。 – Thilo 2010-11-20 13:24:18

+0

这很好用 - 非常感谢你:-) – Bojangles 2010-11-20 13:49:51

0

SELECT tf_posts。*,tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id = 54

看起来错

ON子句应在两个表中使用字段来连接2代表一起

SELECT tf_posts。*,tf_threads.thread_id FROM tf_threads LEFT JOIN tf_posts ON tf_posts.thread_id = tf_threads.thread_id WHERE tf_threads。的thread_id = 54

正如蒂洛说,如果你已经拥有的线程ID只是用它来限制的职位表where子句