Точная настройка базы данных отношений MySQL и как использовать в ней JOIN? - PullRequest
0 голосов
/ 05 февраля 2010

Я очень плохо знаком с MySQL и базами данных, поэтому мне нужна помощь здесь ...

Как мне использовать JOIN для извлечения записи из таблиц ниже, когда единственной заданной переменной является ad_id?

Категория и параметры категории заполняются вручную, т. Е. Пользователи не могут их изменять. Так что это всего лишь справочные таблицы, но я не уверен, что именно так я должен это делать ... У меня 6 таблиц:

category:
cat_id (PK)
cat_name

category_options:
option_id (PK)
cat_id (FK)
option_name

option_value:
value_id (PK) (AI) // I think this should have Auto Increment
option_id (FK)
classified_id (FK)
value

classified: (THIS IS THE MAIN TABLE YOU COULD SAY)
classified_id (PK) (AI)
ad_id
cat_id
headline
description

area: // I am thinking about moving these fields over to the posters table, right?
area_id (PK)
classified_id (FK)
area
description

Вот как я вставляю объявление в таблицы:

mysql_query("INSERT INTO classified (ad_id, cat_id, headline, description) VALUES ('$ad_id', $cat_id, '$headline', '$description')");
$last_classified_id=mysql_insert_id();

mysql_query("INSERT INTO poster (classified_id, name, email, tel) VALUES ($last_classified_id, '$name', '$email', '$tel')");

mysql_query("INSERT INTO area (classified_id, area, community) VALUES ($last_classified_id, '$area', '$community')");

Я новичок в JOIN!

У каждой категории есть подопции (CARS -> color), и у каждой опции есть значение. Я хочу, только имея ad_id, выбрать всю эту информацию.

Как я могу это сделать?

И мне следует объединить стол и стол с плакатами? Также, пожалуйста, внимательно посмотрите на мою базу данных и скажите, есть ли что-то, что я мог пропустить ...

Это действительно из моей базы знаний, поэтому подробные объяснения приветствуются!

Спасибо

Ответы [ 2 ]

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

Это пример объединения некоторых ваших таблиц для получения данных из более чем одной из них:

SELECT c.cat_name, co.option_name, cl.headline
FROM category c 
INNER JOIN category_options co ON co.cat_id = c.cat_id
INNER JOIN classified cl ON cl.cat_id = c.cat_id
WHERE cl.ad_id = {Your ad_id}

Вы можете присоединиться к любым другим нужным столам (плакат, площадь).

Изменить (ответ на комментарий): 'c', 'cl' и 'co' являются псевдонимами для таблиц 'category', 'классифицированы' и 'category_option'. Они не имеют ничего общего с объединением. Здесь источник. Когда я говорю FROM category c, это позволяет мне использовать 'c' в качестве ярлыка для таблицы категорий. Использование псевдонимов позволяет сделать предложение select / joins / where, как я сделал, вместо этого:

SELECT category.cat_name, category_options.option_name, classified.headline
FROM category
INNER JOIN category_options ON category_options.cat_id = category.cat_id
INNER JOIN classified ON classified.cat_id = category.cat_id
WHERE classified.ad_id = {Your ad_id}

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

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

Похоже, у вас есть два поля, которые могут быть первичным ключом в классифицированном :lass_id и ad_id. Затем у вас есть две другие таблицы, постер и площадь, которые имеют однозначное соотношение с классифицированным. Если это так, вы можете поместить все поля в классификацию.

Запрос на объединение таблиц в операторах вставки будет выглядеть следующим образом:

select
    classified.ad_id,
    classified.classified_id,
    classified.headline,
    classified.description AS classified_description,
    poster.name,
    poster.email,
    poster.tel,
    area.area,
    area.description AS area_description from
    classified inner join
    poster
    on
        classified.ad_id = poster.classified_id inner join
    area
    on
        classified.classified_id where
    classified.ad_id = 123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...