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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IFKey
вы не читаете (или не понимаете), что вам пишут.
 
FROM TALOG a, USERS b  
WHERE a.USER_ID = b.USER_ID  
AND b.USER_ID = 7  
 
почему сразу не написать
FROM TALOG a
WHERE a.USER_ID = 7


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:01 25-04-2014
IFKey



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

Цитата:
SELECT * FROM (SELECT * FROM table WHERE USER_ID = 1 AND DATE(EV_DATETIME) = '2014-01-24' ORDER BY EV_DATETIME DESC LIMIT 1) t1
UNION ALL  
SELECT * FROM (SELECT * FROM table WHERE USER_ID = 1 AND DATE(EV_DATETIME) = '2014-01-24' ORDER BY EV_DATETIME LIMIT 1) t2  

Конструкция безусловно хорошая, но на Firebird 1.5 работать не хочет. Кроме того функция DATE() кажется не поддерживается.
Может быть можно в несколько запросов это решить? А на PHP я уже результаты слеплю?
 
Добавлено:

Цитата:
FROM TALOG a
WHERE a.USER_ID = 7
 

Cheery Вы правы, стормозил)))
 
Нашел тут _http://www.firebirdsql.su/doku.php?id=select что Firebird 1.5 не поддерживает вложенные запросы.

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 11:04 25-04-2014 | Исправлено: IFKey, 11:44 25-04-2014
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашел рабочий способ, но он страшный и не красивый, но зато работает:

Цитата:
SELECT
MAX(a.EV_DATETIME) AS MAX_EV_DATETIME,
MIN(a.EV_DATETIME) AS MIN_EV_DATETIME,
a.TA_TYPE
FROM TALOG a
WHERE a.USER_ID = 257
AND a.EV_DATETIME > '2014-04-25'    
AND a.EV_DATETIME < '2014-04-26'  
GROUP BY a.TA_TYPE
 
UNION ALL  
SELECT
MAX(a.EV_DATETIME) AS MAX_EV_DATETIME,
MIN(a.EV_DATETIME) AS MIN_EV_DATETIME,
a.TA_TYPE
FROM TALOG a
WHERE a.USER_ID = 257
AND a.EV_DATETIME > '2014-04-24'    
AND a.EV_DATETIME < '2014-04-25'  
GROUP BY a.TA_TYPE
 
UNION ALL  
SELECT... # и так далее... по аналогии...
 

Получается чем больше дней, тем больше UNION ALL.
И даты приходится скриптом генерировать.
 
Добавлено:
А подскажите пожалуйста, можно ли в запросе выше при отсутствии данных за определенную дату получать пустое значение? Сейчас просто если данных нет, ничего не выбирается.

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 13:48 25-04-2014 | Исправлено: IFKey, 14:01 25-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IFKey
вы бы название темы прочитали, что ли.. речь же о MySQL, вот для него я вам запрос и написал.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:02 25-04-2014
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Приветствую.
 
Реализую тут мультиязычность для системы, создаются таблицы с одинаковыми полями и разными суффиксами для разных языков.
Так вот, нужно организовать выборку так, что при наличии элемента с id=<id> в таблице <table1> данные выбирались из нее, а если нет - то из таблицы <table2> (там они точно есть).
Не хочется в 2 отдельных запроса это делать, хочу объединить.

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 17:07 30-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeADMoHAX
добавить поле с указанием языка, добавить его в запросы выборки и обновления.
зачем несколько таблиц то?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:49 30-04-2014
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
для удобства, сохранения всех id. Что, таблиц жалко что ли)

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 19:41 30-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeADMoHAX
к примеру так
http://stackoverflow.com/q/18310838/1164491

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:46 30-04-2014
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
88 селектов, проще наверно тогда в 2 селекта обойтись спасибо. Думал, будут какие-то элегантные решения.

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 02:27 01-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeADMoHAX
не проще сделать тогда left join из той таблицы, где есть, с той, где может быть.
если справа не нуль, то использовать те данные.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:50 01-05-2014
DeADMoHAX



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

Код:
SELECT hcms_ibitems_en.title, hcms_ibitems.title FROM hcms_ibitems  
LEFT JOIN hcms_ibitems_en ON hcms_ibitems_en.id = '1' OR (hcms_ibitems.id = '1' AND hcms_ibitems_en.id = hcms_ibitems.id);
 

(мало ли кому пригодится)

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 17:55 01-05-2014 | Исправлено: DeADMoHAX, 16:10 03-05-2014
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день
Помогите составить запрос. Хочу что бы автоматом при добавлении строки добавлялась дата.
Нашел такой пример

Код:
CREATE TABLE Orders (
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT CURDATE(),
PRIMARY KEY (OrderId)
)

Но он не рабочий.
Потыкался, нашел вариант с CURRENT_TIMESTAMP, но он пишет еще и время, а мне только дата нужна.

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 11:21 14-07-2014
DarkSmoke



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

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 13:33 14-07-2014
xq



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

Всего записей: 674 | Зарегистр. 05-10-2010 | Отправлено: 12:49 19-07-2014 | Исправлено: xq, 12:50 19-07-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, помогите составить запрос.
 
Есть БД

Код:
id|vip|vote|date
1|0|231|...
2|1|14|...
3|1|0|...
4|0|3|...
5|0|275|...

 
Запрос должен вывести с начало все vip = 1 (их отсортировать по date)
а после того, когда все vip = 1 вывели, выводим все оставшийся по убыванию vote
 
 

Код:
"SELECT `id` FROM `hosts` WHERE `status` = '1' ORDER BY `vip` DESC, `vote` DESC LIMIT 1,10"

 
но не получилось отсортировать vip по date как это сдеелать?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:05 15-08-2014 | Исправлено: Sutar, 22:15 15-08-2014
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
например через union  
SELECT `id` FROM `hosts` WHERE vip = 1 ORDER BY date union SELECT `id` FROM `hosts` WHERE vip = 0 ORDER BY vote DESC
 
Добавлено:
можно и в один запрос - сортировать по одному или нескольким вычисляемых значениям. например так:
SELECT `id` FROM `hosts` WHERE `status` = '1' ORDER BY if(vip=1,date,vote)  DESC

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 23:11 15-08-2014 | Исправлено: DrakonHaSh, 23:33 15-08-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
а что такое union?
я могу в ваш первый запрос поставить ещё и лимит?
т.е. в моем примере это от 1 и 10 записей, но в оригинальном скрипте там от номера страницы и 10 записей....
 
Добавлено:
мне нужно с начало показать все vip=1 по date, а потом все оставшийся по vote

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
union это объединение 2-х запросов в один.
для limit тогда так :
 
select * from (SELECT `id` FROM `hosts` WHERE vip = 1 ORDER BY date union SELECT `id` FROM `hosts` WHERE vip = 0 ORDER BY vote DESC)x limit 1,10

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 23:58 15-08-2014
Sutar



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

Цитата:
select * from

что значит эта приставка?
т.е. получить id с  
 

Код:
SELECT `id` FROM `hosts` WHERE vip = 1 ORDER BY date

а потом и с  

Код:
SELECT `id` FROM `hosts` WHERE vip = 0 ORDER BY vote DESC

??

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, можете, если вам так понятнее, заменить на  
select `id` from (SELECT `id` FROM `hosts` WHERE vip = 1 ORDER BY date union SELECT `id` FROM `hosts` WHERE vip = 0 ORDER BY vote DESC)x limit 1,10  
в данном случае результат будет один и тот же

Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 00:33 16-08-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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