Перейти из форума на сайт.


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Открыть новую тему     Написать ответ в эту тему

Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
 
Если 2 БД, вот структура:
 

Код:
user
----------
id | line | name
1 | 1 | User 1
2 | 2 | User 2
3 | 1 | User 3
 
img
----------
user-id | url
1 | NULL
2 | NULL
3 | ../images/photo/Zkdlc.jpg

 
Как сделать вывод name с БД user убрав повторяющийся (через DISTINCT) line по убыванию по id добавив параметр url с БД img каждому юзеро с соответствующим id?

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 23:20 07-03-2016
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте,
Хочу спросить, возможно ли создать такой Unique Key:
Имеем 2 таблицы
 
product_features_values
feature_id product_id variant_id    
12 35111 522    
12 35111 523  

 
product_features_values
variant_id variant    
522 White    
523 White  

 
Где:
35111 - ИД продукта
12 - Ид характеристики (Цвет)
White - Цвет
 
Можно ли создать Unique Key, чтобы избежать дублированных цветов?
Спасибо
 


----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1338 | Зарегистр. 03-02-2002 | Отправлено: 13:10 20-12-2016 | Исправлено: cabron666, 15:29 20-12-2016
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cabron666

Цитата:
Можно ли создать Unique Key, чтобы избежать дублированных цветов?  

Реальный нет, так как не работает между таблицами. Но триггерами можно сделать.

Всего записей: 4936 | Зарегистр. 20-09-2014 | Отправлено: 14:36 20-12-2016
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
Реальный нет, так как не работает между таблицами. Но триггерами можно сделать.

Спасибо за ответ, не мог бы ты привести пример, как можно сделать это триггерами?
Спасибо

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1338 | Зарегистр. 03-02-2002 | Отправлено: 16:39 20-12-2016
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
бы ты привести пример, как можно сделать это триггерами

а может проще сделать, чтобы в
Цитата:
product_features_values

были уникальные комбинации по цвету? не совсем понятно, зачем два белых там для разных записей.

Всего записей: 4936 | Зарегистр. 20-09-2014 | Отправлено: 00:10 21-12-2016
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Проблема в том, что не только есть цвет, есть другие данные, как диаметр трубы, емкость в м3, номера могут повторяться, но это разные характеристики, по этому существует feature_id, variant_id и variant
 
Спасибо

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1338 | Зарегистр. 03-02-2002 | Отправлено: 13:55 21-12-2016
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
пример, как можно сделать это триггерами?  

не проверял, только для идеи
 

Код:
DELIMITER //
 
CREATE TRIGGER unique_values BEFORE INSERT ON product_features
FOR EACH ROW BEGIN
  DECLARE C INT;
  SELECT COUNT(*) INTO C FROM  
    (SELECT variant FROM product_features_values WHERE variant_id = NEW.variant_id) v,
    product_features p
  LEFT JOIN product_features_values pv ON p.variant_id = pv.variant_id
  WHERE pv.variant = v.variant AND p.product_id = NEW.product_id;
 
  IF (C > 0) THEN
    SIGNAL SQLSTATE '45000' SET message_text = 'Duplicates are not allowed';
  END IF;
END//
 
DELIMITER ;

 
аналогично на обновление, если нужно.

Всего записей: 4936 | Зарегистр. 20-09-2014 | Отправлено: 06:39 26-12-2016 | Исправлено: Mavrikii, 06:39 26-12-2016
yuris

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем. Прошу помощи в создании триггера.
Есть таблица cdr в которую вносятся тел. номера звонящих и ещё куча всего.
В поле src часть номеров заносится правильно в виде 79001234567 начиная с 7 и длиной 11 цифр, другая часть - 9001234567 без 7 впереди и длиной 10.
Хочу привести всё к единому виду типа 79001234567.
Попытался сделать триггер

Код:
 
DELIMITER ;;  
CREATE DEFINER=`asterisk`@`%` TRIGGER cdr_insert AFTER INSERT ON cdr  
FOR EACH ROW BEGIN  
DECLARE ph VARCHAR(25);  
IF CHAR_LENGTH(NEW.src) = '10' THEN  
ph = CONCAT('7',SUBSTRING(NEW.src));
END IF;  
UPDATE cdrdb.cdr SET src = ph WHERE uniqueid = NEW.uniqueid LIMIT 1;  
END;;  
DELIMITER ;
 

получил ERROR 1064 (42000): error in your SQL syntax
near '= CONCAT('7',SUBSTRING(NEW.src));
Делается всё на Server version: 5.5.56-MariaDB MariaDB Server
В правильном направлении я вообще пошел?

Всего записей: 215 | Зарегистр. 19-11-2001 | Отправлено: 16:15 04-10-2017
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuris

Цитата:
В правильном направлении я вообще пошел?

Почти. Зачем править после вставки, если можно править поля перед ней?
Тогда никаких запросов внутри делать не нужно.
А ошибка - set пропустили

Всего записей: 4936 | Зарегистр. 20-09-2014 | Отправлено: 17:39 04-10-2017
yuris

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Mavrikii
Если изменить состояние триггера с AFTER на BEFOR INSERT то я никак не соображу как вставить новое значение. Не могли бы вы пример накидать.
 
 

Всего записей: 215 | Зарегистр. 19-11-2001 | Отправлено: 21:23 04-10-2017
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuris

Цитата:
то я никак не соображу как вставить новое значение.

простой пример

Код:
delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
    FOR EACH ROW
    BEGIN
        IF NEW.amount < 0 THEN
            SET NEW.amount = 0;
        ELSEIF NEW.amount > 100 THEN
            SET NEW.amount = 100;
        END IF;
    END;//
delimiter ;

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

Всего записей: 4936 | Зарегистр. 20-09-2014 | Отправлено: 21:29 04-10-2017 | Исправлено: Mavrikii, 21:33 04-10-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL Помогите составить запрос

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru