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 :: Выбрать соседние записи mysql

 PHP.SU

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


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

> Без описания
myocean
Отправлено: 17 Сентября, 2012 - 04:54:54
Post Id


Гость


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


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




Здравствуйте, столкнулся с проблемой необходимости выбора соседних записей из таблицы mysql... Таблица включает в себя два поля... Name и solution... Name сортируются по алфавиту (ASC)... Необходимо выбрать два соседних значения... если таковые имеются...
Подскажите, каким образом можно это реализовать...
 
 Top
Zuldek
Отправлено: 17 Сентября, 2012 - 09:11:28
Post Id


Постоянный участник


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


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




SELECT * FROM tblname ORDER BY name ASC LIMIT 2

(Отредактировано автором: 17 Сентября, 2012 - 09:19:01)

 
 Top
myocean
Отправлено: 17 Сентября, 2012 - 14:28:18
Post Id


Гость


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


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




Спасибо за ответ, но это немного не то...
Необходимо выбрать не просто два соседних элемента, а два соседних от конкретного...

пример, есть таблица

id | name | solution
0 | а | блаблабла
1 | б | блаблабла
4 | в | блаблабла
8 | г | блаблабла
3 | д | блаблабла
2 | е | блаблабла

например при SELECT * FROM table WHERE id = 8
получить еще значения id=4 b id = 3

Как вариант думаю ввести дополнительное поле, сквозная нумерация, и при каждом обновлении таблицы переписывать данное поле с учетом сортировки по name....
Но думаю это не самый лучший вариант....

(Отредактировано автором: 17 Сентября, 2012 - 14:30:14)

 
 Top
Zuldek
Отправлено: 17 Сентября, 2012 - 14:54:21
Post Id


Постоянный участник


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


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




SELECT * FROM mytable WHERE id IN (3,4,8) ORDER BY name ASC

(Отредактировано автором: 17 Сентября, 2012 - 14:57:13)

 
 Top
myocean
Отправлено: 17 Сентября, 2012 - 16:07:41
Post Id


Гость


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


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




Спасибо...
но как быть если соседние id неизвестны...
соседние name тоже неизвестны...
известно только один конкретный id, нужно найти соседей
 
 Top
Okula
Отправлено: 17 Сентября, 2012 - 16:53:33
Post Id



Участник


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


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




myocean, одним запросом я не придумал как (вобщем и не хотел думать Улыбка ), а вот тремя легко.
Для текущего:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `id` = 6

Следующий
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `id` > 6 ORDER BY `id` DESC LIMIT 1

Предыдущий
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `id` < 6 ORDER BY `id` DESC LIMIT 1
 
 Top
EuGen Администратор
Отправлено: 17 Сентября, 2012 - 17:01:49
Post Id


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


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


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




Okula пишет:
Следующий
CODE (SQL):
скопировать код в буфер обмена

SELECT * FROM `table` WHERE `id` > 6 ORDER BY `id` DESC LIMIT 1

Некорректно, так как Вы получите наибольший id из тех, что превышают 6. Корректно сортировать как есть (ORDER BY id ASC)

Начсет того, как сделать одним запросом - это UNION. Но разницы, если честно, не вижу почти никакой (экономия на соединении с БД)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
myocean
Отправлено: 17 Сентября, 2012 - 17:23:43
Post Id


Гость


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


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




Ага... но сортировать по id нельзя... так как нарушиться алфавитная очередность name

Подскажите, а как в таком случае будет выглядеть запрос с unioun?

(Отредактировано автором: 17 Сентября, 2012 - 17:26:03)

 
 Top
Okula
Отправлено: 17 Сентября, 2012 - 18:58:16
Post Id



Участник


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


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




myocean, отсортировать ты можешь по любому полю.
Помни что UNION ничем не отличается от 2-ух последовательных запросов.
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM `setting` WHERE `id` < 6 ORDER BY `name` DESC LIMIT 1)
  2. UNION
  3. (SELECT * FROM `setting` WHERE `id` > 6 ORDER BY `name` ASC LIMIT 1)

(Добавление)
Что бы строки не перемешались можно добавить сортировку:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM `setting` WHERE `id` < 6 ORDER BY `name` DESC LIMIT 1)
  2. UNION
  3. (SELECT * FROM `setting` WHERE `id` > 6 ORDER BY `name` ASC LIMIT 1)
  4. ORDER BY `name` ASC
 
 Top
EuGen Администратор
Отправлено: 18 Сентября, 2012 - 09:22:33
Post Id


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


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


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




myocean пишет:
Ага... но сортировать по id нельзя... так как нарушиться алфавитная очередность name

Вероятно, имеется ввиду то, что соседние записи нужны с точки зрения поля name.
Тогда в запросах выше используйте name вместо id.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB