Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Выборка, сортировка и исключение
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Viper пишет:
записи с pid 3 и 4
WHERE pid in (3, 4)
Viper пишет:
отсортированные по p_number
OREDER BY p_number
Viper пишет:
GROUP BY p_number
Что это обозначает? (Добавление)
Viper пишет:
попадали только записи с новейшей датой
where not exists (select * from jos_journal_phone_logs where date_field > внешняятаблица.date_field)
Viper
Отправлено: 18 Мая, 2009 - 15:21:24
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
Champion
1. не совсем подходит. если записей 1000 то все не перечислишь
2. сортируется норм
3. не совсем уверен в правильности использования т.к. нет join, но в данном случае позволяет ограничить выборку данных. т.к. у меня поле p_number содержит к примеру 9500, 9501, 9502, 9500, 9500, 9501, мне же нужно вывести уникальные значения а не все подряд.
4. внешняятаблица.date_field не совсем понял. уточню. из p_cdate выбирались максимальные значения. ведь если NOT EXISTS то это не существующие значения ?
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
По 4му пункту: да, NOT EXISTS - это означает, что в таблице нет даты больше, чем в данной строке. Тебе же надо было записи с новейшей датой?
По 1му пункту: если тебе нужно выбрать записи с конкретными pid, то по-другому никак. Можно between, если там диапозон.
По 3му пункту: не понял.
По 4му пункту: внешняятаблица.date_field - хотел сказать поле с датой из внешнего запроса.
select * from jos_journal_phone_logs j where ...... and not exists (... and j.c_date > c.date)
Viper
Отправлено: 18 Мая, 2009 - 16:05:52
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
1. нет. не обязательно по конкретному. выбираются все но с максимальным значением поля p_cdate
3. собстно выбрать максимальное значение p_cdate
4. а нету у меня другой таблицы все в одной.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
1. А зачем тогда пишешь
Viper пишет:
записи с pid 3 и 4
2, 3. Никакой второй таблицы я не предполагал. Поиск максимальной даты в той же таблице идёт. Прочитай и попробуй понять.
Champion пишет:
NOT EXISTS - это означает, что в таблице нет даты больше, чем в данной строке.
(Добавление)
SELECT pid, p_number, p_name, p_name_alias, p_sdate, p_cdate, p_port, p_desc
FROM jos_journal_phone_logs j
where not exists (select * from jos_journal_phone_logs where p_cdate > j.p_cdate)
Viper
Отправлено: 19 Мая, 2009 - 08:31:47
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
угу понял. такс. теперь запрос выводит одну запись
3 | 9500 | John Doe | J. D. | 1241469060 | 1242678840 | 4 | Optional description
а мне нужно ведь получить все записи с максимальной датой... че-то отупел совсем...
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Ну максимальная дата-то одна. Ты , наверное, не то сказал, что хотел.
Если надо с максимальной датой по каждому, например, p_name, то надо
SELECT pid, p_number, p_name, p_name_alias, p_sdate, p_cdate, p_port, p_desc
FROM jos_journal_phone_logs j
where not exists (select * from jos_journal_phone_logs where p_cdate > j.p_cdate and j.p_name = p_name)
Viper
Отправлено: 19 Мая, 2009 - 10:54:05
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
a.dsn вида 1,2,3
далее через for вывожу что нужно. все то выводится но проблема в том что в результате я получаю только первое значение b.g_dsn, а остальные нет. или как-то по другому нужно выборку сделать ?
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
А, я проглядел скриншот.
Ну а ты уверен, что b.g_id IN (a.dsn) - это именно то условие, которое тебе надо? Кстати, странно, зачем тут тебе IN? (Добавление)
Приведи что ли пару строк одной таблицы, пару строк второй и тот результат, который из них хочешь получить. Так проще понять, что ты хочешь
Viper
Отправлено: 22 Мая, 2009 - 12:43:15
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
без IN почему-то не получается выбрать нужное. т.е. опять же в поле dsn может быть произвольное кол-во g_id.
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
аа, dsn - строка и там через запятую, во как.
Тогда либо такое надо условие:
',' || limits.dsn ||',' like ','|| limits_dsn.g_id || ','.
Либо containing.
|| - это конкатенация. Такая она в Firebird. Какая в мускуле - тебе, наверное, виднее (Добавление)
Яндекс говорит, чо там есть concat() для этого
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.