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
Форумы портала PHP.SU :: Версия для печати :: сортировка по нескольким полям
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » сортировка по нескольким полям

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

1. Jungla - 03 Июня, 2008 - 10:53:20 - перейти к сообщению
ребята спасайте!
есть база данных mysql. в ней поля name и name_en
первое поле содержит имена любыми буквами, русскими или англискими
второе поле заполняется когда в первом поле кирилица - тогда во втором тоже самое по англиски.

Например:
John, null
Боря, Borya
Юля, Julia
Peter, null

кроме того есть перименная $t которая включат длЯ иносранных юзеров функцию "показать все латиницей"

делаю так:

$query = "select * from tablica order by name, name_en";

$result = mysql_query ($query) or die ("Query failed");

while ($row = mysql_fetch_array ($result)) {
if ($t != '1') {
echo row["name"]; // тут я разобралась Радость
}
elseif ($tl == '1' and $name_en == null {
echo row["name"]; // тут я тоже разобралась Радость
}
else {
echo row["name_en"];
}

писец в чем: если руские имена выводятся кирилицей с сортировкой все хорошо, получаю
John
Peter
Боря
Юля

а если все нужно показать латиницей сортировка все равно идет по столбцу name и получается
John
Peter
Borya
Julia
не по алфавиту Огорчение

ребята помогите исправить, не дайте умереть невинной!!!! Подмигивание
2. valenok - 03 Июня, 2008 - 12:21:11 - перейти к сообщению
ORDER BY `field` ASC
ORDER BY `field` DESC
3. Jungla - 03 Июня, 2008 - 13:31:20 - перейти к сообщению
valenok пишет:
ORDER BY `field` ASC
ORDER BY `field` DESC


order by у меня уже прописан, а asc и desc вроде бы просто меняют порядок сортировки - прямой или обратрный, нет?

мне не это нужно Огорчение Огорчение Огорчение Огорчение
4. RomAndry - 03 Июня, 2008 - 13:56:09 - перейти к сообщению
Цитата:
сортировка все равно идет по столбцу name и получается

elseif ($tl == '1' and $name_en == null {
вот тут по моему необходимо
elseif ($tl == 1 and $row['name_en'] == null) {

echo row["name"];
должно быть
echo $row["name"];
(Добавление)
у Вас ошибка в логике IFELSE
по сути Ваш скрипт работает
John
Peter
Боря
Юля
только подменяет русские на латинские.
5. valenok - 03 Июня, 2008 - 15:30:35 - перейти к сообщению
дА не разглядел среди смайликов и прочего коктейля
6. Jungla - 03 Июня, 2008 - 15:37:22 - перейти к сообщению
[quote=RomAndry]
Цитата:

echo row["name"];
должно быть
echo $row["name"];


ну да, так оно и есть. просто когда адаптировала для форума код, слишком уж садаптроавала Огорчение

мне нужно, чтобы сортировка шла по столбцу name, там где на выход идет name, и по столбцу name_en, там где на выход идет name_en.

как этого добиться я и не могу понять - сортировка всегда идёт по name. если изменить порядок в order by на name_en, name тоже ничего хорошего не получается. должен же быть способ
(Добавление)
valenok пишет:
дА не разглядел среди смайликов и прочего коктейля


простите уж глупую блондинку! без смайликов.
7. RomAndry - 03 Июня, 2008 - 16:23:17 - перейти к сообщению
Вам необходимо строить логику запроса по значению переменной $t
типа такого:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $order = $t==1 ? 'name' : 'name_en';
  4. $query = "SELECT * FROM `tablica` ORDER BY " . $order;
  5. ?>
  6.  
8. Jungla - 03 Июня, 2008 - 16:34:58 - перейти к сообщению
RomAndry пишет:
Вам необходимо строить логику запроса по значению переменной $t
типа такого:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $order = $t==1 ? 'name' : 'name_en';
  4. $query = "SELECT * FROM `tablica` ORDER BY " . $order;
  5. ?>
  6.  


да но переменная $t лишь включает или не включает обработку поля name_en. если $t включена, значит подключается иностранец, который не понимает кирилицу и хочет увидеть не Вася (он это не прочитает), а Vasya.

проблему это не решает, потому что в записи John поле name_en == null, так что php будет пытаться сделать сортировку по null. а нужно, чтобы увидев в поле name_en null скрипт обращался к полю name и продолжал сортировку
(Добавление)
нужно что-то вроде

if ($row["name_en" == null)
{order by $row["name_en"]}
else
{order by $row["name"] }

Знаю, что это работать не будет, а вот как сделать, чтобы работало?
9. EuGen - 03 Июня, 2008 - 22:21:10 - перейти к сообщению
Меня это запутало - то, что Вы привели.
Возможно, Вам поможет:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT *, IFNULL(`name_en`, `name`) AS grname FROM tablica ORDER BY grname
  3.  
10. Jungla - 04 Июня, 2008 - 11:52:06 - перейти к сообщению
спасибки EuGen! заработало! очень простое и красивое решение!

тема закрыта, но я щас открою другую Подмигивание

 

Powered by ExBB FM 1.0 RC1