Еще один вопрос mysql JOIN - PullRequest
0 голосов
/ 05 февраля 2010

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

classified:
classified_id (PK)
price
headline
cat_id // THIS IS ANYTHING FROM 1 TO 30 DEPENDING ON CATEGORY. IT IS SO THAT I CAN LINK WHICH CATEGORY TO USE IN THE CATEGORY TABLE BELOW
text
etc...

category:
cat_id (PK)
cat_name

category_options:
option_id (PK)
cat_id (FK) // FOREIGN KEY FROM CATEGORY TABLE...
option_name

option_values:
value_id (PK)
option_id (FK)
classified_id (FK)
value

Как мне использовать здесь соединение, кто-нибудь может дать мне быстрый пример?

Вот пример моей настройки:

      category
cat_id       cat_name
  1            cars

         category_options
option_id     cat_id    option_name 
   1             1         color
   2             1        gearbox

         option_values
 value_id       option_id       classified_id      value
    1              1                 22             red
    2              2                 22            manual

         classified
classified_id      price        headline         cat_id
    22              5000        'test'              1 //for cars

Я хочу иметь возможность получить все опции и их значения из одной категории (в этих бывших автомобилях), только «зная» секретный_идентификатор (в данном случае 22).

По сути, мне нужна помощь с оператором соединения ...

и, пожалуйста, не используйте псевдонимы в коде, чтобы упростить его для меня:)

Спасибо

Ответы [ 3 ]

1 голос
/ 05 февраля 2010

Я знаю, что это не отвечает на ваш главный вопрос, но я хотел бы предложить предложение, которое, как я считаю, облегчит вашу жизнь ...

  1. Имена столбцов для столбцов PK - просто назовите их все "id". Уменьшает количество вещей, которые вы должны запомнить. Устраняет основной источник путаницы и потенциальных ошибок.

  2. Сделать имена таблиц согласованными. Я имею в виду сделать их все одинаковой формы. Вы можете сделать их всех существительными в единственном или множественном числе, но просто сделать их одинаковыми. Запросы становятся легче писать и легче понимать.

    classifieds

    categories

    category_options

    option_values

  3. Имена столбцов для столбцов FK - как здесь: parent_table_id. Например: classified.category_id.

  4. Устранить любые словесные выражения, которые не содержат новую информацию. Например, category.name вместо category.cat_name.

0 голосов
/ 06 февраля 2010

Вам даже не нужно явно указывать соединение здесь. Столь же просто, что вы хотите получить значения из двух таблиц (опций и их значений), где option_ids идентичны, и выбрать только те результаты, в которых совпадает ваш идентификатор категории «cat».

SELECT cat_id, classified_id, option_id, option_name, value
  FROM option_values, category_options
 WHERE category_options.option_id = option_values.option_id
   AND classified_id = <?> AND cat_id = <?>
0 голосов
/ 05 февраля 2010

Что-то вроде

SELECT category_option.option_name, option_values.value FROM classified, category_option, option_values WHERE classified.classified_id=?id AND classified.cat_id=category_options.cat_id AND option_values.option_id=category_options.option_id

Если вы передадите 22 для параметра? Id, вы получите 2 строки:

Цвет Красный

Механическая коробка передач

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