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

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

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

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

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

Mavrikii

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

Код:
set @count := 0, @prev := '';  
update dff_posts join (
select tmp.id, tmp.name from (    
select dff_posts.id, IF(@prev <> dff_posts.post_name, @count := 1, @count := @count + 1), @prev := dff_posts.post_name, CONCAT(dff_posts.post_name, '-', @count) name from dff_posts,  
(SELECT `post_name`, COUNT(*) AS `count` FROM `dff_posts` GROUP BY `post_name` HAVING `count` > 1) tmp2  
where dff_posts.post_name = tmp2.post_name    
order by dff_posts.post_name  
) tmp) jtmp on jtmp.id = dff_posts.id  
set dff_posts.post_name = jtmp.name;

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 16:05 27-02-2018
fanmas



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Можно пример кода чтобы при создании строки в поле id попадало число предыдущее значение +1(это нумерация, должна начаться с 1), но нужно чтобы у всех строк с одним clientid велась своя собственная нумерация.

Всего записей: 49 | Зарегистр. 07-07-2005 | Отправлено: 07:08 27-02-2019
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fanmas
я же написал вам, в чем проблема то, не работает что ли?

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 07:08 27-02-2019
fanmas



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сейчас проверю, сюда продублировал.

Всего записей: 49 | Зарегистр. 07-07-2005 | Отправлено: 07:25 27-02-2019
cherchan

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Может я ошибся с темой, но очень нужна помощь. Есть сайт, работающий на DLE. При регистрации пользователя на сайте, в БД в таблице dle_users создается пользователь, которому присваивается уникальный цифровой user_id начиная с 1 и далее. Эти id присваиваются по порядку: 1, 2, 3, ... 100, 101, 102... и так далее. Нам нужно, чтобы нумерация начиналась не с 1, а, скажем, с 1000. Разработчики DLE утверждают, что это делается настройками MySQL. Так ли это и как нам получить нумерацию новых пользователей с заданного числа?

Всего записей: 103 | Зарегистр. 13-03-2005 | Отправлено: 17:24 02-04-2019
Mavrikii

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cherchan
ALTER TABLE table_name AUTO_INCREMENT = цифра;

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 17:35 02-04-2019 | Исправлено: Mavrikii, 17:36 02-04-2019
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет, подскажите плиз, как объеденить следующие выражения в одно

Цитата:
 
    AND LENGTH(`text`.`content`) > 0
    AND LENGTH(`catalog_entity_slug`.`value`) > 0
    AND `text`.`language_id` = 1
    AND `catalog_entity_slug`.`language_id` = 1;
 

т.е. сделать их как:

Цитата:
 
AND NULLIF(`text`.`content`, `catalog_entity_slug`.`value`) IS NOT NULL
 

PS: сам запрос полностью:

Цитата:
 
SELECT  
    `product`.`id`,
    `text`.`content`,
    `catalog_entity_slug`.`value`
FROM `product`
    LEFT JOIN `text` ON `text`.`id` = `product`.`id`  
    LEFT JOIN `catalog_entity_slug` ON `catalog_entity_slug`.`id` = `product`.`id`  
WHERE `product`.`category_id` = 94  
    AND NULLIF(`text`.`content`, `catalog_entity_slug`.`value`) IS NOT NULL
    AND LENGTH(`text`.`content`) > 0
    AND LENGTH(`catalog_entity_slug`.`value`) > 0
    AND `text`.`language_id` = 1
    AND `catalog_entity_slug`.`language_id` = 1;
 

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 21:18 02-06-2020 | Исправлено: Kaber, 21:19 02-06-2020
Mavrikii

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

Цитата:
как объеденить следующие выражения в одно

зачем? у mysql полно внутренних оптимизаций.
я бы вместо LENGTH(...) > 0 написал бы ... <> ''
и посмотрел в EXPLAIN изменения. LENGTH, наверняка, берет из данных о строке

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 21:59 02-06-2020
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
спс, а можно еще вопрос, как выбрать только уникальные `product`.`id` ?
Что то типа

Цитата:
SELECT DISTINCT
    `product`.`id`,
    `text`.`content`,
    `catalog_entity_slug`.`value`,
    `product`.`category_id`

Чтобы действовало только на полу `product`.`id`

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 22:20 02-06-2020
Mavrikii

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

Цитата:
Чтобы действовало только на полу `product`.`id`

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

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 22:24 02-06-2020 | Исправлено: Mavrikii, 22:25 02-06-2020
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
а можете подсказать в чем принципиальная разница если запрос сделать:

Код:
 
SELECT  
    `product`.`id`,
    `text`.`content`,
    `catalog_entity_slug`.`value`
FROM `product`
    LEFT JOIN `text` ON `text`.`id` = `product`.`id`  
    LEFT JOIN `catalog_entity_slug` ON `catalog_entity_slug`.`id` = `product`.`id`  
WHERE `product`.`category_id` = 94  
    AND NULLIF(`text`.`content`, `catalog_entity_slug`.`value`) IS NOT NULL
    AND LENGTH(`text`.`content`) > 0
    AND LENGTH(`catalog_entity_slug`.`value`) > 0
    AND `text`.`language_id` = 1
    AND `catalog_entity_slug`.`language_id` = 1;
 

Или так:

Код:
 
SELECT  
    `product`.`id`,
    `text`.`content`,
    `catalog_entity_slug`.`value`
FROM `product`
    LEFT JOIN `text` ON `text`.`id` = `product`.`id`  
        AND LENGTH(`text`.`content`) > 0
        AND `text`.`content` IS NOT NULL
        AND `text`.`language_id` = 1
    LEFT JOIN `catalog_entity_slug` ON `catalog_entity_slug`.`id` = `product`.`id`  
        AND LENGTH(`catalog_entity_slug`.`value`) > 0
        AND `catalog_entity_slug`.`language_id` = 1
WHERE `product`.`category_id` = 94;
 

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 08:19 03-06-2020 | Исправлено: Kaber, 08:19 03-06-2020
Mavrikii

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

Цитата:
а можете подсказать в чем принципиальная разница если запрос сделать

ни в чем, кроме отсутствия одного условия

Цитата:
NULLIF(`text`.`content`, `catalog_entity_slug`.`value`) IS NOT NULL

не идентично

Цитата:
`text`.`content` IS NOT NULL

так как не хватает text.content <> catalog_entity_slug.value

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 08:32 03-06-2020 | Исправлено: Mavrikii, 08:34 03-06-2020
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как добавить поле у условие выборки, только если оно не NULL
т.е. что то типа этого

Код:
 
CASE WHEN a.addressid IS NOT NULL  
       THEN 1
       ELSE 0
END AS addressexists
 

Только вместо 1/0 делать WHERE a.addressid = 10
Можно как то в таком направлении сделать запрос?

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 23:35 14-07-2020
Mavrikii

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

Цитата:
Только вместо 1/0 делать WHERE a.addressid = 10

А при чем тут case вообще?
Where a.addressid = 10 уже значит, что оно не null
Внятно вопрос задайте.

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 00:09 15-07-2020
Kaber



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

Цитата:
Внятно вопрос задайте.


Код:
id | name  | category_id | man
 
- - - - - - -- - - - -- - - - - -
 
1  | test1 | 10          | vaz
2  | test2 | 5           | niva  
3  | test2 | null        | zil  
4  | test4 | 5           | null  
5  | test4 | 5           | vaz (этой записи может не быть)
 
 
 
man = vaz
category_id = 5

 
Как выбрать наиболее подходящее условие?
 
т.е. получается:
тут 4-ая запись самая подходящая

Код:
 
 
id | name  | category_id | man
 
- - - - - - -- - - - -- - - - - -
 
1  | test1 | 10          | vaz
2  | test2 | 5           | niva  
3  | test2 | null        | zil  
4  | test4 | 5           | null  
 

а тут 5-ая запись

Код:
 
 
id | name  | category_id | man
 
- - - - - - -- - - - -- - - - - -
 
1  | test1 | 10          | vaz
2  | test2 | 5           | niva  
3  | test2 | null        | zil  
4  | test4 | 5           | null  
5  | test4 | 5           | vaz
 

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 00:19 15-07-2020 | Исправлено: Kaber, 00:33 15-07-2020
Mavrikii

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

Цитата:
Как выбрать наиболее подходящее условие?

подходящее к чему?
что либо man нулевое, либо равно определенному значению?
 
where category_id = 5 and (man is null  or man = 'vaz')

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 00:34 15-07-2020
Kaber



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

Цитата:
подходящее к чему?

Да, 'либо равно определенному значению' - если так то выбираем именно эту запись, иначе ищем совпадение по category_id, а man опускаем

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 00:41 15-07-2020
Mavrikii

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

Цитата:
where category_id = 5 and (man is null  or man = 'vaz')

но это выберет и null и vaz.
выборку только null если нет vaz просто условием не сделать, там нужно использовать EXISTS
 
хотя.. можно и без, добавив сортировку и ограничение по выборке
 
WHERE category_id = 5 AND (man IS NULL OR man = 'vaz') ORDER BY man DESC LIMIT 1
либо ASC, я не помню как сортируется нулевое значение.

Всего записей: 9709 | Зарегистр. 20-09-2014 | Отправлено: 00:44 15-07-2020 | Исправлено: Mavrikii, 00:46 15-07-2020
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Огромное спасибо, все просто оказалось с LIMIT 1 - сам как-то осмотрит лучшее совпадение)

Всего записей: 1066 | Зарегистр. 14-03-2014 | Отправлено: 00:48 15-07-2020
Открыть новую тему     Написать ответ в эту тему

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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru