За последние 24 часа нас посетили 16172 программиста и 1666 роботов. Сейчас ищут 896 программистов ...

Order By доступ к элементам массивов

Тема в разделе "PHP для новичков", создана пользователем Serghter, 8 сен 2013.

  1. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    Кто нибудь подскажите пожалуйста как написать в коде php так, чтобы допустим в таблице БД есть поля name,level через php запрос я сортирую данные по возрастанию по полю level.

    Код (Text):
    1.  
    2. $querylevel = "SELECT us_name,level FROM  e_users WHERE vk_id=vk_id ORDER BY  e_users.level DESC"; ///Запрос левелов
    3.  $resultlevel = mysql_query($querylevel);
    4.  $reslevel = mysql_fetch_array($resultlevel);
    Результат как я понимаю в виде таблицы, подскажите как мне преобразовать этот результат так,чтобы в echo выводилось в такой форме?

    Иванов,Петров,Сидоров-7,5,1

    Но пытаюсь написать echo $reslevel['us_name']."-".$reslevel['level'];

    он выводит только так: Иванов-7

    Там наверно как-то нужно Replace'ить чтобы добавить "запятые" и "тире" между элементами.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    а что выведет print_r($reslevel); посмотри и сюда
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в цикле надо перебирать результат
     
  4. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    только что попробовал print_r($reslevel); вывел
    Array ( [0] => Иванов [us_name] => Иванов [1] => 7 [level] => 7 )

    записей в БД 3 для теста,имена Иванов,Петров,Сидоров
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в цикле
     
  6. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    igordata
    а как записать в цикле?

    Код (Text):
    1. foreach($reslevel as $value)
    2. {
    3.    echo print_r($value), "<br>";
    4. }  
    я вот так записал,к 7-кам добавилось 1.
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    результат print_r = 1
    поэтому echo выводит 1

    Что ты хочешь записать, не понял...
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $querylevel = "SELECT us_name,level FROM e_users WHERE vk_id=vk_id ORDER BY e_users.level DESC"; ///Запрос левелов
    $resultlevel = mysql_query($querylevel);
    while ($reslevel = mysql_fetch_array($resultlevel)) {
    var_dump($reslevel);
    }
     
  9. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    igordata
    Вот что мне вывело,но это да в цикле выводится,а как преобразовать,чтобы не было дубликатов типа:
    string(6) "Иванов" ["us_name"]=> string(6) "Иванов" [1]=> string(1)

    Добавлено спустя 1 минуту 21 секунду:
    smitt

    мне нужна строка,которая будет представлена на выходе в таком виде:

     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    MYSQL_ASSOC

    Добавлено спустя 40 секунд:
    В цикле выводи, в чем вопрос?

    Добавлено спустя 2 минуты 10 секунд:
    Если нужны запятые везде то
    Код (PHP):
    1. while ($reslevel = mysql_fetch_array($resultlevel)) {
    2. echo implode(',', $reslevel);
    3. }
    4.  
     
  11. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    smitt

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

    Код (Text):
    1.  
    2.  
    3. $lengthLevel = count ($reslevel['us_name']);
    4. for ($l=0;$l<$lengthLevel;$l++){
    5. echo $reslevel['us_name'][$l];."-".$reslevel['level'][$l];
    6. }
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ааааааааа

    не ту ты функцию заюзал просто

    $querylevel = "SELECT us_name,level FROM e_users WHERE vk_id=vk_id ORDER BY e_users.level DESC"; ///Запрос левелов
    $resultlevel = mysql_query($querylevel);
    while ($reslevel = mysql_fetch_assoc($resultlevel)) {
    var_dump($reslevel);
    }
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Объясни что хочешь.

    Вывести все имена через запятую потом их левелы?
    Точно скажи и получишь ответ.
     
  14. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0

    igordata

    ну да,я просто добавил к ...fetch_array($resultlevel,MYSQL_ASSOC); но можно и так.
     
  15. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. $names = array();
    2. $levels = array();
    3.  
    4. while ($reslevel = mysql_fetch_array($resultlevel, MYSQL_ASSOC)) {
    5.     $names[] = $reslevel['us_name'];
    6.     $levels[] = $reslevel['level'];
    7. }
    8.  
    9. echo implode(',', $names).' - '.implode(',', $levels);
     
  16. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    smitt

    да,просто хочу чтобы вывелась строка именно в такой форме с "запятыми" между именами и левелами и одним только тире, тире говорит о том что идет разделение между всеми именами пользователями и их уровнями,которые были отсортированны по возрастанию.
     
  17. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Проверяй
     
  18. Serghter

    Serghter Новичок

    С нами с:
    7 сен 2013
    Сообщения:
    42
    Симпатии:
    0
    smitt

    Да!!! Все отлично! работает! Спасибо большое.