- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем доброго времени суток.. Может кто знает.., как в MySQL узнать соседние строки?
Кпримеру есть таблица с полями ID,NAME, VIEWS, RATE
нужно узнать соседние строки учитывая то что ID идет не подряд и с учётом сортировки по полю VIEWS
Возможно есть чтото кроме
SELECT * FROM TABLE WHERE `views`<78 LIMIT 1
SELECT * FROM TABLE WHERE `views`>78 LIMIT 1
нужно узнать соседние поля учитывая то что ID идет не подряд и с учётом сортировки по полю VIEWS
А что мешает считать структуру таблицы?
select colname
from syscolumns
where tabid = (select tabid from systables where tabname = 'tablename');
или типа select * from mytable where 1=0
А что мешает считать структуру таблицы?
select colname
from syscolumns
where tabid = (select tabid from systables where tabname = 'tablename');
или типа select * from mytable where 1=0
Сорри, недавно проснулся и толком криво поставил вопрос.., нужно найти соседние строки и желательно 1м запросом..
Возможно есть чтото кроме
SELECT * FROM TABLE WHERE `views`<78 LIMIT 1
SELECT * FROM TABLE WHERE `views`>78 LIMIT 1
нету и даже это неправильно.
нужна двойная сортировка order by views,primary_id и условие primary_id>NNN чтобы полностью стабилизировать порядок.
но если там идет расчет чего-то для каждого значения в таблице, то можно в сессионных переменных mysql хранить предыдущие значения и использовать эти значения в вычислениях. техника несколько непривычная и неудобная, так что нужно взвесить стоит ли.
нету и даже это неправильно.
нужна двойная сортировка order by views,primary_id и условие primary_id>NNN чтобы полностью стабилизировать порядок.
но если там идет расчет чего-то для каждого значения в таблице, то можно в сессионных переменных mysql хранить предыдущие значения и использовать эти значения в вычислениях. техника несколько непривычная и неудобная, так что нужно взвесить стоит ли.
ну кпримеру нам известен основной ID, эт 14 и поле VIEWS у него равно 78, узнать соседние поля вполне можно узнать так:
SELECT * FROM TABLE WHERE `views`<78 LIMIT 1
SELECT * FROM TABLE WHERE `views`>78 LIMIT 1
Но тогда если значение views ещё у нескольких полей будет 78, то мой вариант не сработает.. Вот собственно полез на форум..
netwind По поводу двойной сортировки, чтото не пойму зачем order by views,primary_id и условие primary_id>NNN, что тут стабилизировать? Соседний primary_id может быть 1 и может быть 999 и условие primary_id>NNN тут явно невтему..
Кстате была идея вывести все записи в определенной сортировке и загнать значения в массив и потом достать ИД соседних полей.., но эт сильно грузить сервер будет, а такбы не побрезговалбы, ггг
FFFFx029A, вы напишите первоначальный запрос.
если нужно было узнать только id "соседних" строк, то можно так
(SELECT id FROM table WHERE id < id_target ORDER BY id DESC LIMIT 1) as id_prev,
(SELECT id FROM table WHERE id > id_target ORDER BY id LIMIT 1) as id_next
FROM table WHERE [условие исходной строки]
netwind По поводу двойной сортировки, чтото не пойму зачем order by views,primary_id и условие primary_id>NNN, что тут стабилизировать? Соседний primary_id может быть 1 и может быть 999 и условие primary_id>NNN тут явно невтему.
вот именно этот случай я и имел ввиду. В вашем запросе sql волен будет выдать в каком угодно порядке поля где view совпадает. Это и нужно стабилизировать добавляя дополнительное да еще и уникальное поле для сортировки. Получаете предсказуемый порядок и все отлично.
Ну вообщем в итоге с затеей листинга, т.е показа соседних записей передумал, нужно было для http://bomz.org
Думаю оно там не нужно, да и нагрузка дополнительная с этими телодвижениями..
Как вариант выбрать все значения и уже при выборке запоминать предыдущее значение, дождавшись нужного у нас будет предыдущее и нужное и остается всего-лишь пройтись по массиву еще раз и получится следуещее и break. Но так придется все записи выбирать...
или попробовать
SELECT * FROM TABLE WHERE `views`<= 78 or `views`>= 78 LIMIT 3
$before=$row[0];
$current=$row[1];
$next=$row[2];
Как вариант выбрать все значения и уже при выборке запоминать предыдущее значение, дождавшись нужного у нас будет предыдущее и нужное и остается всего-лишь пройтись по массиву еще раз и получится следуещее и break. Но так придется все записи выбирать...
или попробовать
$before=$row[0];
$current=$row[1];
$next=$row[2];
Правильней, на мой взгляд, будет:
SELECT * FROM TABLE WHERE `views`= 78-1 LIMIT 3
смысл понятен, надеюсь :)