2014-04-03 2 views
0

Я пытаюсь получить данные из таблицы отзывов, затем снова присоединяюсь к той же таблице, но нахожу разные данные (на основе) идентификатора первой таблицы (обзоры) и находим соответствующее описание из другая объединенная таблица (описания).MySQL возвращает те же данные разных строк

Я знаю, что это может быть трудно представить, но, может быть, кто-то будет знать, почему любит из второй таблицы обзорам возвращают те же данные для разных строк:

SELECT r.title, co.likes, d.description 
FROM reviews r 
INNER JOIN reviews co 
INNER JOIN reviews_descriptions d 
ON co.id = d.review_id 
WHERE co.parent = 52 
AND r.id = 52; 

В результате получается два ряда, в которых название и любит имеют те же данные, в то время как поле описания захватывает разные данные (правильный путь). Likes должны иметь разные данные для каждой строки.

Помогите пожалуйста.

+0

Вы пропустили добавление 'on' части в соединении. –

+0

Я знаю, это просто я не думаю, что мне это нужно, потому что позже я сравниваю вторую таблицу отзывов с таблицей описания. – polymorph

+0

Похоже, что ваша таблица может использовать некоторую настройку, если вам нужно использовать внутреннее соединение для получения данных, связанных с одним и тем же идентификатором. Почему вы не можете использовать r.likes вместо co.likes? – Devon

ответ

0

Альтернатива для написания этого, и я считаю, что это то, что вы ищете:

SELECT r.title, co.likes, d.description 
FROM reviews r, reviews co, review_descriptions d 
WHERE co.parent = r.id AND d.review_id = co.id AND r.id = 52; 

Поскольку вы соответствие co.parent до 52 и r.id до 52, то вы должны иметь присоединиться на co.parent = r.id, однако вам редко приходится делать соединение в одной таблице. Я думаю, что ваши таблицы плохо отформатированы или вам не нужно делать это в первую очередь, и они должны использовать r.likes вместо co.likes.

+0

Девон комментарии и отзывы в основном то же самое, поэтому они находятся в одной таблице и только дифференцируются, зная, являются ли они родителем (ревью) или дочерним (комментарий). В основном я пытаюсь получить данные обзора из таблицы обзоров и описание обзора, которое находится в другой таблице, на основе комментария (той же таблицы, что и обзор), которая имеет наибольшее количество «нравится». Все в одном запросе. Таким образом, полученный комментарий - это тот, который принадлежит к этому комментарию с самыми любимыми. – polymorph

+0

Я понимаю это, но это нарушает стандарты в управлении базами данных. Вы действительно должны их разделить и связать с помощью внешнего ключа. Предоставленный мной SQL должен по-прежнему работать на основе того, как вы представили информацию выше. – Devon

+0

Вы, скорее всего, более осведомлены, чем я, в этой теме, но мне кажется абсурдным иметь две таблицы с ОЧЕНЬ подобными структурами, за исключением одного поля, которое действительно может быть использовано, когда все может быть в одной таблице и отображать их посредством соединения Информация. – polymorph

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