Что нового

Вопрос по БД MySQL (1 Viewer)

pipulas

pipulas

Посетитель
OLD SkripTers
Регистрация
17 Дек 2019
Сообщения
1,088
Реакции
9
Всем привет!
Есть таблица users:

1
2


И есть таблица data:

3
4

Как мне их соединить вместе? Т.е. у пользователя exapmle1@mail.ru может иметь несколько записей из таблицы data.
Вопросы:
1. Как привязать записи из таблицы data к пользователю из таблицы user.
2. Как делать запрос выборки из таблицы user по пользователю, чтобы он подтягивал и записи из таблицы data которые к нему привязаны.
3. Так же и запрос по конкретному сайту, например вытащить пользователя exapmle1@mail.ru и его данные только по сайту vk из таблицы data.
4. Ну и создавать записи в таблицу data с привязкой к определенному пользователю, например к exapmle1@mail.ru.
 
Как привязать записи из таблицы data к пользователю из таблицы user.
добавить поле user, сделать unique site и user. Далее по Foreign Key привязать поле user к id таблицы users

SQL:
CREATE TABLE users (id    BIGINT UNSIGNED AUTO_INCREMENT,
                    name  VARCHAR(50)  NULL,
                    email VARCHAR(50)  NULL,
                    pass  VARCHAR(150) NULL,
                    CONSTRAINT id
UNIQUE (id),
                    CONSTRAINT users_pk
UNIQUE (email));
SQL:
CREATE TABLE data (id   INT             NULL,
                   site VARCHAR(10)     NULL,
                   val1 INT             NULL,
                   val2 INT             NULL,
                   user BIGINT UNSIGNED NULL,
                   CONSTRAINT data_pk
UNIQUE (site, user),
                   CONSTRAINT data_users_id_fk
FOREIGN KEY (user) REFERENCES users (id)
ON UPDATE CASCADE ON DELETE CASCADE);

важно, чтобы id из users и user из data имели одинаковый тип!

2. Как делать запрос выборки из таблицы user по пользователю, чтобы он подтягивал и записи из таблицы data которые к нему привязаны.
ты не получишь результат одной лиь строкой, но можешь получить все касающиеся пользователя данные
SQL:
SELECT u.id AS user_id,
       u.name,
       u.email,
       u.pass,
       d.id AS data_id,
       d.site,
       d.val1,
       d.val2
    FROM users              u
             LEFT JOIN data d ON u.id = d.user
    WHERE u.id = 1

3. Так же и запрос по конкретному сайту, например вытащить пользователя exapmle1@mail.ru и его данные только по сайту vk из таблицы data.
SQL:
SELECT u.*
FROM data                d
LEFT JOIN users u ON u.id = d.user
    WHERE d.site = 'vk'
4. Ну и создавать записи в таблицу data с привязкой к определенному пользователю, например к exapmle1@mail.ru.
SQL:
INSERT INTO data (site, val1, val2, user)
    VALUES ('ok', 2, 3, 2)
 
Спасибо, буду разбираться.
 
А еще вопрос по поводу UPDATE и DELETE.
Допустим я выбрал пользователя по сайту vk:
SQL:
SELECT d.* FROM data d LEFT JOIN users u ON u.id = d.user_id WHERE d.site = 'vk' and u.id = 1;
Получаю вот такую выборку:
5
Как делать UPDATE например auth_key.
Я так понимаю одним запросом это не сделать? Нужно тогда получить id этой записи и тогда уже делать UPDATE или DELETE.
PHP:
$load = $db->getRow('SELECT d.* FROM data d LEFT JOIN main_users u ON u.id = d.user_id WHERE d.site=?s and u.id=?i', 'vk', '1');
$data = array('auth_key' => 'new_key');
$db->query('UPDATE data SET ?u WHERE id=?i', $data, $load['id']);
Или можно как то одним запросом это делать?
 
Как делать UPDATE например auth_key.
SQL:
UPDATE data
SET val1 = 435
    WHERE site = 'vk'
      AND user = 1

просто указываешь на другие уникальные ключи. в случае таблицы data это сайт соцсети и id пользователя

З.Ы. благодаря Foreign Key, если пользователь будет удалён, то и данные из data тоже удаляться вместе с ним
 

Пользователи, просматривающие данную тему

Верх