2010-11-20 3 views
0

Я использую этот запрос MySQL, названный MySQL:MySQL JOIN: строки не возвращаются

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.

EDIT:

Идея этого запроса выбрать все темы из одной таблицы (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

+0

Отредактировал свой ответ. – Thilo

+0

Это отлично работает - большое спасибо :-) – Bojangles

0

ВЫБОР tf_posts. *, Tf_threads.thread_id ОТ tf_threads LEFT JOIN tf_posts НА tf_threads.thread_id = 54

выглядит неправильно

оговорка о том, следует присоединиться к 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

И как Тило говорит, что если у вас уже есть идентификатор потока просто использовать, чтобы ограничить таблицу сообщений с где положение

Смежные вопросы