Запрос SQL SELECT для нескольких таблиц - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть эти таблицы:

USERS:
user_ID
username
password
email
data_registered

POSTS:
post_ID
user_ID
post_title
post_content
post_data

CATEGORY:
cat_ID
post_ID
cat_title

Теперь я использовал эту ситуацию:

в таблице USERS У меня есть:

(1, 'admin, '5hj63jhn120011', 'admin@gmail.com', '15.02.2012')

в таблице POSTS:

(1, 1, 'Hello', 'Content goes here', '15.02.2012')

в таблице CATEGORY:

(1, 1, 'web developing'), 
(2, 1, 'software programming'), 
(3, 1, 'web design')

Итак, у меня есть только 1 пользователь, 1 публикация и 3 категории.Как выделить их в одном утверждении?Я использовал это утверждение:

SELECT 
  p.post_title, 
  p.post_content, 
  u.username, 
  c.cat_title 
FROM 
  posts p 
  LEFT JOIN users u 
     ON p.user_ID = u.user_ID 
  LEFT JOIN category c 
     ON c.post_ID = p.post_ID

, но выбрал 3 строки с 3 различными категориями.Я все еще учусь правильно выполнять эти JOIN-запросы, поэтому буду признателен за любую помощь.

И после этого, например, у меня будет ситуация для выбора данных из таблицы COMMENTS, так что это будетсложно.Просто отметим, что это таблица комментариев:

COMMENTS:
comment_ID
user_ID
post_ID
c_username
c_email
c_content

Будет сложно выделить эти комментарии для пользователя, поста и категории в целом.Итак, еще один вопрос: можно ли разделить эти запросы на выборку, и является ли это хорошей практикой в ​​целом (при разработке на PHP)?

Ответы [ 4 ]

0 голосов
/ 15 февраля 2012

без пробовал, я думаю, что решение:

SELECT p.post_title, p.post_content, u.username, c.cat_title 
FROM users u LEFT JOIN posts p ON u.user_ID = p.user_ID
LEFT JOIN category c ON p.post_ID = c.post_ID

если вы измените порядок столбцов идентификаторов, значение LEFT JOIN изменится. Таким образом, вы получите три строки результатов ....

0 голосов
/ 15 февраля 2012

Используйте что-то подобное:

SELECT 
  p.post_title, 
  p.post_content, 
  u.username, 
  GROUP_CONCAT(c.cat_title + ',') cat_titles
FROM posts p 
LEFT JOIN users u 
  ON p.user_ID = u.user_ID 
LEFT JOIN category c 
  ON c.post_ID = p.post_ID
GROUP BY 
  p.post_title, 
  p.post_content, 
  u.username

Я не уверен в правильном использовании GROUP_CONCAT, но похоже, что будет работать

0 голосов
/ 15 февраля 2012

Я думаю, что это должно быть так:

POSTS:
post_ID
user_ID
cat_ID
post_title
post_content
post_data

CATEGORY:
cat_ID
cat_title

Поскольку категориям не нужны посты, к которым они относятся, но каждому посту нужна категория, к которой они относятся.

Обновление:

Если намерение «многие ко многим» - это должно быть так:

POSTS:
post_ID
user_ID
post_title
post_content
post_data

CATEGORY:
cat_ID
cat_title

POST_CATEGORY:
post_ID
cat_ID
0 голосов
/ 15 февраля 2012

Попробуйте:

SELECT p.post_title, 
       p.post_content, 
       u.username, 
       group_concat(c.cat_title) categories
FROM posts p 
LEFT JOIN users u ON p.user_ID = u.user_ID 
LEFT JOIN category c ON c.post_ID = p.post_ID
group by p.post_id

- если вы хотите увидеть все категории для одного сообщения в одной строке.

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