2015-03-13 4 views
1

я пытаюсь извлечь все фотографии детали из тега слизняк (URL для тега), база данных содержит три таблицы:INNER JOIN на три таблицы с условием

|-----------------------| 
|==> photo    | 
| -> id    | 
| -> custom_id  | 
| -> title   | 
|-----------------------| 
|==> tags    | 
| -> id    | 
| -> slug    | 
|-----------------------| 
|==> tags_relation  | 
| -> tid    | <-- this is the tags.id 
| -> pid    | <-- this is the photo.custom_id 
|-----------------------| 

вот мой MySQL код чтобы INNER JOIN всех таблиц и получить 20 фотографий с тегом:

SELECT photo.*, tags.*, tags_relation.*, 
FROM tags WHERE tags.slug = 'people' 
INNER JOIN tags_relation ON = tags_relation.tid = tags.id 
INNER JOIN photo ON photo.custom_id = tags_relation.pid 
LIMIT 20 
ORDER BY photo.date DESC 

запрос не является правильным в любом случае, и я не могу понять, как INNER JOIN должен работать здесь, какие-либо идеи? Благодаря

+0

Я думаю, что у вас была ошибка в первой строке, ее 'tgas. *' Вместо 'тегов. *', А во второй строке '' FORM' вместо 'FROM' –

+0

@NarendraSisodia благодарит за то, что это была некоторая опечатка – rakibtg

ответ

1

SQL имеет определенный порядок статей. В вашем случае:

  • ВЫБРАТЬ
  • ОТ
  • ГДЕ
  • GROUP BY
  • ORDER BY
  • LIMIT

Это всегда упорядочение в запросе. Обратите внимание, что выражения JOIN не являются «оговорками». Они являются частью предложения FROM (а также в MySQL, и delete).

Применительно к Вашему запросу:

SELECT p.*, t.*, tr.* 
FROM tags t INNER JOIN 
    tags_relation tr 
    ON tr.tid = t.id INNER JOIN 
    photo p 
    ON p.custom_id = tr.pid 
WHERE t.slug = 'people' 
ORDER BY p.date DESC 
LIMIT 20 

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

Я также добавил псевдонимы таблиц, которые упрощают чтение и чтение запроса. И исправлены некоторые незначительные вещи, такие как неуместные запятые.

Заметьте, что вы вынимаете слишком много столбцов из данных. Вы должны просто перечислить нужные столбцы (возможно, p.*).

+0

Они могут быть не оговорками, но для меня они рассматривают их как читаемость. Я предпочитаю, чтобы мой формат был вашим (очевидно), но каждый по своему усмотрению. – Strawberry

+0

@ GordonLinoff Я многое узнал из вашего ответа, так сильно спасибо. Еще одна вещь, я не понимаю, что вы указали на последнюю строку своего ответа. – rakibtg

+1

@meh. , , Вероятно, нет причин помещать тег в 'select', потому что вы уже знаете, что это' 'slug''. –

0

попробовать это ..

SELECT photo.*, tags.*, tags_relation.* 
    FROM tags WHERE tags.slug = 'people' 
    INNER JOIN tags_relation ON(tags_relation.tid = tags.id) 
    INNER JOIN photo ON (photo.custom_id = tags_relation.pid) 
    ORDER BY photo.date DESC 
    LIMIT 20 
Смежные вопросы