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 :: Выборка, сортировка и исключение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Viper
Отправлено: 18 Мая, 2009 - 14:36:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Не могу сообразить как составить запрос.
Есть таблица

CODE (text):
скопировать код в буфер обмена
  1. pid | p_number | p_name | p_name_alias | p_sdate | p_cdate | p_port | p_desc
  2. 1 | 9500 | John Doe | J. D. | 123456709 | 123456899 | 4 | Optional description
  3. 2 | 9501 | Kate Doe | K. D. | 123456709 | 123456899 | 2 | Optional description 1
  4. 3 | 9500 | John Doe | J. D. | 1241469060 | 1242678840 | 4 | Optional description
  5. 4 | 9501 | Kate Doe | K. D. | 1242073860 | 1242678840 | 2 | Optional description 1


мне нужно выбрать так чтобы в результ у меня попали записи с pid 3 и 4 отсортированные по p_number

пробовал так

CODE (text):
скопировать код в буфер обмена
  1. SELECT pid, p_number, p_name, p_name_alias, p_sdate, p_cdate, p_port, p_desc
  2. FROM jos_journal_phone_logs
  3. GROUP BY p_number
  4. ORDER BY p_number ASC


но выводит записи с pid 1 и 2. добавлял условие но в результате вообще ничего не выводит Недовольство, огорчение

к тому же записей может быть и 10000 и в этом случае нужно чтобы попадали только записи с новейшей датой

(Отредактировано автором: 18 Мая, 2009 - 14:38:53)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 18 Мая, 2009 - 14:58:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 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)
 
 Top
Viper
Отправлено: 18 Мая, 2009 - 15:21:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Champion
1. не совсем подходит. если записей 1000 то все не перечислишь
2. сортируется Улыбка норм
3. не совсем уверен в правильности использования т.к. нет join, но в данном случае позволяет ограничить выборку данных. т.к. у меня поле p_number содержит к примеру 9500, 9501, 9502, 9500, 9500, 9501, мне же нужно вывести уникальные значения а не все подряд.
4. внешняятаблица.date_field не совсем понял. уточню. из p_cdate выбирались максимальные значения. ведь если NOT EXISTS то это не существующие значения ?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 18 Мая, 2009 - 15:41:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 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)
 
 Top
Viper
Отправлено: 18 Мая, 2009 - 16:05:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




1. нет. не обязательно по конкретному. выбираются все но с максимальным значением поля p_cdate
3. собстно выбрать максимальное значение p_cdate
4. а нету у меня другой таблицы Недовольство, огорчение все в одной.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 18 Мая, 2009 - 16:15:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 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)
 
 Top
Viper
Отправлено: 19 Мая, 2009 - 08:31:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




угу понял. такс. теперь запрос выводит одну запись

3 | 9500 | John Doe | J. D. | 1241469060 | 1242678840 | 4 | Optional description

а мне нужно ведь получить все записи с максимальной датой... че-то отупел совсем...


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 19 Мая, 2009 - 08:36:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 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)
 
 Top
Viper
Отправлено: 19 Мая, 2009 - 10:54:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




во! спасибо! разобрался что к чему.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Viper
Отправлено: 21 Мая, 2009 - 20:20:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




эммм... ещё по ходу дела возник вопрос...
выбираю из 2 таблиц данные

CODE (text):
скопировать код в буфер обмена
  1. SELECT a.id, a.images, a.year, a.dsn, a.stage_manager, a.state, b.g_id, b.g_dsn
  2. FROM #__limits AS a
  3. LEFT JOIN #__limits_dsn AS b ON b.g_id IN (a.dsn)
  4. WHERE published = '1' AND access <= '1'
  5. ORDER BY id DESC


a.dsn вида 1,2,3
далее через for вывожу что нужно. все то выводится но проблема в том что в результате я получаю только первое значение b.g_dsn, а остальные нет. или как-то по другому нужно выборку сделать ?

сделал RIGHT JOIN получил вот такое
http://i39[dot]tinypic[dot]com/2d1k9c2[dot]jpg

когда вывожу через цикл получаю такое

CODE (text):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => stdClass Object
  4.         (
  5.             [id] => 1
  6.             [movie_name] => абвгд
  7.             [genre] => 1,2,3
  8.             [gid] => 1
  9.             [g_genre] => alias1
  10.         )
  11.  
  12. )

куда деваются ещё 3 строки с g_genre ?

(Отредактировано автором: 22 Мая, 2009 - 08:54:18)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Мая, 2009 - 08:44:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Выполни запрос в каком-нибудь MySQL-Maestro и смотри, что выдаст. И эксперементируй.
 
 Top
Viper
Отправлено: 22 Мая, 2009 - 10:43:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Champion пишет:
Выполни запрос в каком-нибудь MySQL-Maestro и смотри, что выдаст. И эксперементируй.


скриншот привел с HeidiSQL. Выполнил запрос в SQLyog результат тот же.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Мая, 2009 - 10:51:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




А, я проглядел скриншот.
Ну а ты уверен, что b.g_id IN (a.dsn) - это именно то условие, которое тебе надо? Кстати, странно, зачем тут тебе IN?
(Добавление)
Приведи что ли пару строк одной таблицы, пару строк второй и тот результат, который из них хочешь получить. Так проще понять, что ты хочешь
 
 Top
Viper
Отправлено: 22 Мая, 2009 - 12:43:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




без IN почему-то не получается выбрать нужное. т.е. опять же в поле dsn может быть произвольное кол-во g_id.

таблица limits

id | stage_manager | dsn
1 | абвгд | 1,2,3

таблица limits_dsn

g_id | dsn
1 | alias
2 | alias2
3 | alias3

нужно получить что-то вида

абвгд, 1,2,3, alias, alias2, alias3


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 22 Мая, 2009 - 12:53:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




аа, dsn - строка и там через запятую, во как.
Тогда либо такое надо условие:
',' || limits.dsn ||',' like ','|| limits_dsn.g_id || ','.
Либо containing.
|| - это конкатенация. Такая она в Firebird. Какая в мускуле - тебе, наверное, виднее
(Добавление)
Яндекс говорит, чо там есть concat() для этого
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB