imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 17.08.2004, 17:34     # 1
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Еще один вопрос...

Допустим, я на PHP задал такой запрос в MYSQL
$table = query("SELECT username,realname FROM user ");

Теперь, требуется следующее:
Если поле realname пусто строки пусто, ее нужно сортировать по username. Если же оно не пусто, то эту строку нужно сортировать по realname... Каждую из строк по отдельности.

Это технически невыполнимо?

Впрочем, можно наверно сделать так:

$i = 0;

while ($theuser = mysql_fetch_array($table)) {

if ($theuser[realname] != "") {
$thefullname = $theuser[realname].$theuser[username];
} else {
$thefullname = $theuser[username];
}

$result[$i] = $thefullname;
$i++;

}

А дальше - отсортировать получившийся массив по алфавиту?
Или это большая нагрузка на сервер и лучше просто сделать дополнительное поле в базе данных (combinedname) и обновлять его при редактировании пользователем своего профиля?

Последний раз редактировалось Neo; 17.08.2004 в 17:37.
Psionic Vision вне форума  
Старый 17.08.2004, 21:03     # 2
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
$table = query("SELECT username,realname FROM user order by realname, username");
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 17.08.2004, 21:27     # 3
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Hubbitus
Вы меня не совсем поняли... Дело в том, что нет гарантии, что поле realname не является пустым.

Поэтому мне нужно, чтобы:

если (не пусто(realname)) {
результат row = сортировка В ОБЩЕМ СПИСКЕ по(realname.username)
} в противном случае {
результат row = сортировка В ОБЩЕМ СПИСКЕ по(username)
}

Зачем?
Да вот:

Есть таблица со следующим списком людей:
Username | Realname

Vasya | Василий Петрович
Francis | Эдуард Крутой
Анна | [пустая запись]
Петя | Владимир Коровин

Мне нужно, чтобы результат сортировки был следующим:

Анна
Василий Петрович (Vasya)
Владимир Коровин (Петя)
Эдуард Крутой (Francis)

Теперь понятно?

А ваш запрос выдает мне сначала всех юзер с английсим ником, дальше всех с русским ником, а дальше то же самое - но юзеров и с ником, и с именем......

Т.е сначала идут всем без имени, сортируясь по нику, а дальше все, кто имеют и ник, и имя, сортируясь по имени.

Последний раз редактировалось Neo; 17.08.2004 в 21:40.
Psionic Vision вне форума  
Старый 18.08.2004, 18:52     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Neo, за заголовок темы пока предупреждаю устно.
RaZEr вне форума  
Старый 18.08.2004, 22:45     # 5
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Цитата:
Neo:
если (не пусто(realname)) {
результат row = сортировка В ОБЩЕМ СПИСКЕ по(realname.username)
} в противном случае {
результат row = сортировка В ОБЩЕМ СПИСКЕ по(username)
}
order by ifnull(realname, concat(realname, ' ', username), username)
__________________
Nunc est bibendum
is_absent вне форума  
Старый 19.08.2004, 17:13     # 6
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
RaZEr
А что не так с заголовком? Его неинформативность?
Если так - прошу прощения.

is_absent
Yay!
Именно то что надо. Если оно еще и работает... То совсем хорошо. Спасибо.
Psionic Vision вне форума  
Старый 20.08.2004, 06:19     # 7
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
упс.. прошу прощения.
ifnull(realname, username, concat(realname, ' ', username))
__________________
Nunc est bibendum
is_absent вне форума  
Старый 20.08.2004, 16:10     # 8
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
is_absent
Нет, это не работает.
Синтаксис:
Цитата:
IFNULL(A,B) Если A не null, вернет A, иначе вернет B.
А значит работает оно так (по крайней мере для меня):

ifnull(concat(realname, ' ', username), username);

Мне оно возвращает таким образом правильный результат, который мне и был нужен Хотя не совсем ясно, почему.

Наверное, еще (в принципе) можно сделать так:
IF(A,B,C) Если A истина (!= 0 and != NULL), то вернет B, иначе вернет C.

IF(realname!=NULL, concat(realname, ' ', username), username)

?
Psionic Vision вне форума  
Старый 20.08.2004, 21:05     # 9
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Neo
виноват твои оба варианты верны.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 21.08.2004, 04:55     # 10
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
А оно не работает...
Вернее работает не правильно.

Смотри тут, и обрати внимание на алфавит:
--

Запрос такой:
SELECT DISTINCT a.userid, u.username, u.realname FROM articles a, user u WHERE a.secid='".$_GET['secid']."' AND a.userid = u.userid ORDER BY IF(u.realname!=NULL,u.realname,u.username) ASC

Видно они сортируются по установленному первой записью значению... Зайдите на страницу, и посмотрите сверху на результаты print_r... юзер с наименьшим userid не имеет realname, в результате все сортируются по username...
А нужно, чтобы для каждой записи сортировка шла отделно..

S.O.S!

Последний раз редактировалось Psionic Vision; 29.12.2007 в 20:20.
Psionic Vision вне форума  
Старый 21.08.2004, 11:49     # 11
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
IF(realname is NULL, username, concat(realname, ' ', username))
offtop: чего-то я совсем плохой стал. спать чаще надо
проверку на NULL нужно делать оператором is. Остальные операторы сравнения (>, <, !=, = и т.п.) всегда возвращают false.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 21.08.2004, 16:07     # 12
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Всего равно не так.
Теперь она сначала сортирует всех без realname по алфавиту, дальше она сортирует всех с realname по алфавиту повторно....
Psionic Vision вне форума  
Старый 23.08.2004, 05:41     # 13
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Запрос работает правильно (по карйней мере на твоих данных).
Проверь кодировку базы данных и кодировку, в которой ты кладешь данные. Надо, чтобы они совпадали . Вполне возможно, что твои данные хранятся в cp1251, а база данных хранит их в koi-8. Тогда действительно результат будет такой, как ты описал.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 23.08.2004, 06:03     # 14
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
is_absent
Я решил вопрос простым добавлением нового поля в таблицу пользвоателей.
НО:
Цитата:
Вполне возможно, что твои данные хранятся в cp1251, а база данных хранит их в koi-8.
Данные хранятся где? Разве не в базе данных? А база - в кои8. Ничего не понимаю..
Psionic Vision вне форума  
Старый 23.08.2004, 06:21     # 15
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Neo
вот эти запросы:
Код:
select if (realname is null, username, concat(realname, ' (', username, ')')) fullname
from t3
order by fullname
или
Код:
select if (realname is null, username, concat(realname, ' (', username, ')')) fullname
from t3
order by if(realname is null, username, concat(realname, username))
на моих данных (может быть я что-то не учел) работают правильно. Да и по логике получается... может все-таки проблемы с перекодировкой туда-сюда? сайт-то в win-1251 отображается. Я в свое время намучился с этим сильно..

Цитата:
Neo:
Данные хранятся где? Разве не в базе данных? А база - в кои8. Ничего не понимаю..
я хотел сказать, что ты отдаешь данные, в кодировке cp1251, а база данных хранит их в koi8. сортировать она тоже будет в koi8 соответвственно.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 23.08.2004, 15:05     # 16
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
У меня есть подобная проблемка:
есть таблица:
id | reply_to |
+---+---------+
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
| 10 | 7 |
| 11 | 10 |
Каким запросом ее можно выбрать в следующем порядке:
id | reply_to |
+---+---------+
| 6 | 0 |
| 7 | 0 |
| 10 | 7 |
| 11 | 10 |
| 8 | 0 |
| 9 | 0 |
Тоесть, если есть reply_to равный id, чтобы он шел бы за ним...?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 23.08.2004, 15:20     # 17
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Hubbitus
если в таблице есть значение поля id равное значению reply_to в текущей строке, то нужно чтобы эта строка была под той строкой содержащей id?
Грубо говоря развернуть дерево ответов?
если вложенность произвольная -- не получится (нужны иерархические запросы). если же вложенность фиксированная - то можно попробовать.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 23.08.2004, 15:54     # 18
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Именно развернуть дерево, чтобы не делать N запросов по числу id....
Как подобная задача "правильно" решается, кто-то вкурсе?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 23.08.2004, 16:27     # 19
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
is_absent
Я не знаю.
Если я в phpmyadmin выбираю кодировку win-1251, то я весь русский текст спокойно вижу в правильном виде.
Сайт вроде тоже в win 1251... по крайней мере, в htaccess я это прописал.
Где это еще меняется?
Psionic Vision вне форума  
Старый 24.08.2004, 05:57     # 20
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Hubbitus
_http://detail.phpclub.net/article/db_tree
на мой взгяд описанная идея реализации наиболее удобна для MySQL.

Neo
кодировку базы данных хранит переменная сharacter_set. посмотреть ее можно show variables like 'character_set%'. Но проблема похоже не в этом. Проверил на трех разных кодировках -- результат такой, как ты просил.
__________________
Nunc est bibendum
is_absent вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:22.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.