MySQL JOIN: строки не возвращаются - PullRequest
0 голосов
/ 20 ноября 2010

Я использую этот запрос 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.

EDIT:

Идея этого запроса состоит в том, чтобы выбрать все потоки из одной таблицы (tf_threads),и возьмите первый пост в этой теме из другой таблицы (tf_posts) и используйте поле posts title в качестве заголовка для темы.

Спасибо,

James

Ответы [ 2 ]

1 голос
/ 20 ноября 2010

Ваше предложение о присоединении не имеет смысла для меня. Похоже, вы пытаетесь получить все сообщения для thread_id 54, но вы не соединяете две таблицы и не получаете никаких данных из таблицы tf_threads, кроме thread_id, который, как я предполагаю, также присутствует в ваших tf_posts Таблица. Почему бы просто не использовать предложение WHERE:

SELECT * FROM tf_posts WHERE thread_id = 54

Если это не сработает, пожалуйста, опубликуйте описания таблиц и то, что должен вернуть запрос.

Чтобы ответить на ваши изменения, вам нужно присоединиться к таблицам, и с ВНУТРЕННИМ СОЕДИНЕНИЕМ, если вам нужен только один пост, - ЛЕВОЕ СОЕДИНЕНИЕ даст вам все посты для каждой темы.

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 голосов
/ 20 ноября 2010

ВЫБРАТЬ tf_posts. *, Tf_threads.thread_id ОТ tf_threads ВЛЕВО ПРИСОЕДИНЯЙТЕСЬ tf_posts ON tf_threads.thread_id = 54

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

предложение ON должно объединять две таблицы вместе, используя поля в обеих таблицах

ВЫБРАТЬ tf_posts. *, Tf_threads.thread_id ОТ tf_threads ВЛЕВО ПРИСОЕДИНЯЙТЕСЬ tf_posts ON tf_posts.thread_id = tf_threads.thread_id ГДЕ tf_threads.thread_id = 54

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...