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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
poskrobka
Отправлено: 26 Мая, 2010 - 09:43:22
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Сент. 2009  


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




столкнулся с такой проблемой - получаем из базы строки и сортируем по длине - необходимо переделать запрос сортировка производилась так: если есть определённое слово то строки с этим словом выводились начиная с наименьшей длины - а потом все остальные строки тоже начиная с наименьшей длины -
надеюсь понятно объяснил.
 
 Top
alexspb
Отправлено: 26 Мая, 2010 - 12:09:34
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


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




если в лоб решить, то разбить на два запроса

в одном условие
field LIKE '%slovo%'

во втором
field NOT LIKE '%slovo%'

а там уже сортируйте по длине


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
Вездеход
Отправлено: 26 Мая, 2010 - 13:05:04
Post Id



Частый посетитель


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


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




alexspb
а вы уверены в своих словах?

poskrobka
поясните еще раз :
1. слово это должно быть в базе или как условие в php передается например...
2. база то большая чтоль? ибо если хотя бы меньше 10к записей - нормально.. если например по 100к - не айс будет =)


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
poskrobka
Отправлено: 26 Мая, 2010 - 13:35:21
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Сент. 2009  


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




[quote=Вездеход][/quote] слово в базе - пока 2к записей - но будет около 50к использую полнотекстовый поиск с индексированием - сложный получается запрос формируемый из результата множества условий - пробовал разбить на два запроса через union c добавлением поля переменной идентификатора запроса - но не возможна в mysql сортировка по переменной этой
 
 Top
Вездеход
Отправлено: 26 Мая, 2010 - 14:02:11
Post Id



Частый посетитель


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


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




я бы сделал как писал alexspb в 2 запроса.
ибо если вы будете писать 1 сложный запрос - базу будет не айс.. ибо записей много. особенно если запрос будет часто отрабатываться.
и кстати если у вас будет 50к записей - то всеже лучше предварительно обрабатывать количество записей, ибо надо будет наверно по страницам разбить.. а то 50к записей (если они большие) многовато места будут занимать в браузере =)


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
EuGen Администратор
Отправлено: 26 Мая, 2010 - 14:07:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




SELECT * FROM `table` ORDER BY `field` LIKE '%$keyword%', LENGTH(`field`)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
alexspb
Отправлено: 26 Мая, 2010 - 14:10:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


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




poskrobka пишет:
пробовал разбить на два запроса через union

я говорил про два простых ПОСЛЕДОВАТЕЛЬНЫХ запроса
отработать один, потом другой

про разбиение на страницы вам уже подсказали

а вообще в слепую (не видя задачи полностью) трудно искать решение


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
poskrobka
Отправлено: 26 Мая, 2010 - 14:18:07
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Сент. 2009  


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




было так
CODE (SQL):
скопировать код в буфер обмена
  1.  $q = "SELECT main_id,ea, txt, price, firm, phone, lnk, payed, length(txt) as len ".
  2.              "FROM tbl_main WHERE ".$search." ORDER BY $ord ".
  3.          " LIMIT $limit, $num ";
где $ord - сортировка по длине len

разбил так

CODE (SQL):
скопировать код в буфер обмена
  1.  $q = "SELECT main_id,ea, txt, price, firm, phone, lnk, payed, length(txt) as len ".
  2.              "FROM tbl_main WHERE ".$search." AND 'txt' not  like '%$slovo%' union
  3.                  SELECT main_id,ea, txt, price, firm, phone, lnk, payed, length(txt)+200 as len ".
  4.              "FROM tbl_main WHERE ".$search."  AND 'txt' like '%$slovo%', $ord ".
  5.          " LIMIT $limit, $num ";
length(txt)+200 as len - строки короткие - и это залог сортировки по длине двух разных запросов - в результате всё осталось как есть - в чём может быть проблема?

(Отредактировано автором: 26 Мая, 2010 - 14:20:21)

 
 Top
alexspb
Отправлено: 26 Мая, 2010 - 14:45:31
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


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




а там нет просто ошибки 'txt' - кавычки другие должны быть `txt`


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB