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

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

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

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

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

Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
вообщем накрутил уже другой скрипт. Ито из-за union а ж MySQL падал
такой вопрос остался, есть какие-то другие способы сортировки кроме ASC и DESC?
 
просто оно сортирует не много не так....
 
Как сортерует сейчас:

Код:
10...
101....
102...
104.....
11.......
111.....
113....
12.....
123....

 
можно сделать так, чтоб сортировало так?
 

Код:
10...
11.......
12.....
101....
102...
104.....
111.....
113....
123....

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 01:23 14-09-2014
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
нюанс в разнице между сортировкой строк и чисел. ваш первый вариант - результат сортировки строк, а вы хотите сортировку как чисел - для этого данные сортировки нужно привести в числовой формат
http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html
смотрите комментарий и пример от Albert Vega

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 13:30 14-09-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
Спасибо большое. Решение нашел

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 00:36 15-09-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
К вашему запросу:
 

Код:
SELECT * FROM
(
  (select * from (SELECT * FROM `server` WHERE `vip` > '". time() ."' ORDER BY `id` DESC)x1)
 union all
  (select * from (SELECT * FROM `server` WHERE `vip` = '' ORDER BY `vote` DESC, `id` DESC)x2)
)x3
LIMIT 1, 30

 
такой вопрос, первая проверка работает корректно.
но как сделать проверку с второй?
получается нужно первым делом, вывести все записи с БД где vip > time() по убыванию id
а затем, вывести все оставшийся, где vip = NULL или < time() по ORDER BY `vote` DESC, `id` DESC
 
но не получается что-то с вторым запросом где vip < time или = NULL(

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 18:56 06-10-2014
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
по идее заменить второй подзапрос на:
(select * from (SELECT * FROM `server` WHERE (`vip` = '' or `vip`<= time ) ORDER BY `vote` DESC, `id` DESC)x2)  
 
а учитывая что в первом подзапросе у вас какое-то колдунство ))

Цитата:
WHERE `vip` > '". time() ."'

то возможно так:
(select * from (SELECT * FROM `server` WHERE (`vip` = '' or `vip` <= '". time() ."') ORDER BY `vote` DESC, `id` DESC)x2)  

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 19:39 06-10-2014 | Исправлено: DrakonHaSh, 19:39 06-10-2014
Sutar



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

Код:
`vip` IS NULL or `vip` <= '". time() ."'

 
так работает лучше)

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:04 07-10-2014
Mavrikii

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

Цитата:
'". time() ."')

зачем, если у MySQL есть now()

Всего записей: 15591 | Зарегистр. 20-09-2014 | Отправлено: 21:19 07-10-2014
ShafMAN

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Не могу сам разобраться, потому прошу помощи в составлении запроса.
Имеется такая таблица:
 

Код:
 
table_name
 +----------------------------------------------+
 | id | killerUUID | killedUUID | timestamp |
 +----------------------------------------------+
 | 1 | 1111         | 2222         |                 |
 | 2 | 1111         | 2222         |                 |
 | 3 | 1111         | 3333         |                 |
 | 4 | 2222         | 3333         |                 |
 | 5 | 2222         | 1111         |                 |
 

 
Нужно удалять данные из таблицы таким образом что-бы killerUUID каждого UUID было 16 и killedUUID каждого UUID было 16.
 
 Через php это выглядит таким образом. (для killerUUID)
 Я сначала выбираю все killerUUID
 

Код:
 
SELECT killerUUID                
            FROM TABLE_NAME
            GROUP BY killerUUID
            ORDER BY TIMESTAMP DESC  
 

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

Код:
 
        foreach ($data as $val) {
            delKills($val->killerUUID);
        }
 

 
Здесь сам запрос на удаление

Код:
 
    DELETE
            FROM TABLE_NAME
            WHERE killerUUID='UUID'
            ORDER BY TIMESTAMP DESC  
            LIMIT 16
 

 
И тоже самое повторяю для поля killedUUID.
 
Как можно это сделать один запросом?
Пытался сделать что-то вроде этого (для killerUUID), но никак не получается

Код:
 
            DELETE  
            FROM TABLE_NAME  
            WHERE killerUUID IN (SELECT killerUUID FROM t_kills GROUP BY killerUUID ORDER BY TIMESTAMP DESC)
            LIMIT 16
 

 
без LIMIT всё удалится, а с LIMIT тоже не то что нужно...

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 04:40 21-11-2014
Mavrikii

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

Цитата:
killerUUID каждого UUID было 16 и killedUUID каждого UUID было 16

эм.. по моему это не всегда возможно в случае И

Всего записей: 15591 | Зарегистр. 20-09-2014 | Отправлено: 05:07 21-11-2014
ShafMAN

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

Цитата:
эм.. по моему это не всегда возможно в случае И

согласен, но это не суть важно, главное что-бы можно было уменьшать количество записей killerUUID и killedUUID (таблица постоянно пополняется)

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 05:14 21-11-2014
Mavrikii

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

Цитата:
главное что-бы можно было уменьшать количество записей killerUUID и killedUUID (таблица постоянно пополняется)

 
ну, к примеру, так.. простого запроса там не будет
http://explainextended.com/2009/04/26/keeping-latest-rows-for-a-group/

Всего записей: 15591 | Зарегистр. 20-09-2014 | Отправлено: 05:19 21-11-2014
ShafMAN

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

Всего записей: 125 | Зарегистр. 09-01-2005 | Отправлено: 05:41 21-11-2014
niko7

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите составить запрос. Нужно из таблицы test выбрать все записи в имени которых содержится "Решет" Попробовал так: SELECT * FROM 'test' WHERE `name` LIKE 'Реше*'; ничего не находит. Подскажите, что не так написал?

Всего записей: 2429 | Зарегистр. 23-09-2004 | Отправлено: 15:38 18-12-2014 | Исправлено: niko7, 15:39 18-12-2014
DrakonHaSh



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

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 15:41 18-12-2014
niko7

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh Попробовал так:
SELECT *
FROM `test`
WHERE `name` LIKE `%Реше%`;
Пишет ошибку: 1054 - Unknown column '%&#208; &#208;µ&#209;&#710;&#208;µ%' in 'where clause'  
Подскажите, что можно сделать?

Всего записей: 2429 | Зарегистр. 23-09-2004 | Отправлено: 15:52 18-12-2014
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ковычки не те
надо
'' или ""
а у вас `` - для mysql это не строка, а имя колонки

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 16:02 18-12-2014
niko7

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh Получилось, огромное спасибо .  
Что означает знак % в "%Реше%" перед и после нужного слова?

Всего записей: 2429 | Зарегистр. 23-09-2004 | Отправлено: 17:00 18-12-2014
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пожалуйста
 
% в like это sql-ный аналог *  
 
в вашем запросе можно было и так LIKE 'Реше%'. у меня просто привычка с обоим сторон обрамлять в %.

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 17:12 18-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день уважаемые форумчане!  
 
Я тут на быдлокодил запрос, и что-то мне подсказывает, что его срочно нужно оптимизировать.  
Ибо выглядит он как-то не кашерно, в общем, вот он:  

Код:
 
SELECT COUNT(*) AS 'total',  
        /* Выборка 1 */  
    (SELECT COUNT(*) FROM `forum_topic` WHERE topic = 'topic1') AS 'topic1_count',  
    (SELECT datetime FROM `forum_topic` WHERE topic = 'topic1' ORDER BY datetime DESC LIMIT 1) AS 'topic1_update',  
    (SELECT author FROM `forum_topic` WHERE topic = 'topic1' ORDER BY datetime DESC LIMIT 1) AS 'topic1_author',  
    (SELECT nametopic FROM `forum_topic` WHERE topic = 'topic1' ORDER BY datetime DESC LIMIT 1) AS 'topic1_nametopic',  
    (SELECT ID FROM `forum_topic` WHERE topic = 'topic1' ORDER BY datetime DESC LIMIT 1) AS 'topic1_ID',  
         /* Выборка 2 */  
    (SELECT COUNT(*) FROM `forum_topic` WHERE topic = 'topic2') AS 'topic2_count',  
    (SELECT datetime FROM `forum_topic` WHERE topic = 'topic2' ORDER BY datetime DESC LIMIT 1) AS 'topic2_update',  
    (SELECT author FROM `forum_topic` WHERE topic = 'topic2' ORDER BY datetime DESC LIMIT 1) AS 'topic2_author',  
    (SELECT nametopic FROM `forum_topic` WHERE topic = 'topic2' ORDER BY datetime DESC LIMIT 1) AS 'topic2_nametopic',  
    (SELECT ID FROM `forum_topic` WHERE topic = 'topic2' ORDER BY datetime DESC LIMIT 1) AS 'topic2_ID'  
FROM `forum_topic`  
 

И таких "Выборок" (специально закомментировал в коде) 10!  
Натолкните на мысли

Всего записей: 411 | Зарегистр. 13-10-2011 | Отправлено: 12:59 20-12-2014
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно отсортировать по значению mysql, которое может быть нулем, целым или пустой строкой, причем пустая строка должна идти выше нуля.  
Точнее даже нужно сделать что все что не нуль( арифметический нуль) - шло сначала, а потом записи с нулем.  
Как это максимально просто написать? Есть ли функция в mysql - которая приведет к таким параметрам поле, что его можно будет простом order by в конце прописать?

Всего записей: 1633 | Зарегистр. 08-10-2011 | Отправлено: 09:12 15-01-2015 | Исправлено: xerpal, 09:24 15-01-2015
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru