За последние 24 часа нас посетили 33015 программистов и 1756 роботов. Сейчас ищут 817 программистов ...

Цикл в цикле?

Тема в разделе "PHP для новичков", создана пользователем viktor72, 17 мар 2017.

Метки:
  1. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Надо вывести фирмы и все вакаснии которые есть у фирмы.
    есть две связанные таблицы: фирма и вакансии. у одной фирмы может быть много вакансий, у вакансии одна фирма.
    img-2017-03-17-04-13-25.png
    могу вывести так:
    PHP:
    1. <?php
    2. $sql = "SELECT*FROM rd, vakans WHERE rd.idrd = vakans.rd_idrd";
    3. $array = mysqli_query($db, $sql);
    4. while($row = mysqli_fetch_array($array)){
    5.     echo "$row[rd] - ";
    6.     echo "$row[vakans]  <br> ";
    7. }
    8. ?>
    фирма1 - менеджер
    фирма1 - продавец
    фирма2 - кассир
    фирма2 - бухгалтер

    надо вывести так:
    фирма 1 - менеджер, продавец
    фирма2 - кассир, бухгалет

    Пробовал while в while , но это было не правильно. Как правильно?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @viktor72 думаю хватит одного while, если отсортировать по фирмам, тогда просто в цикле при смене фирмы выводи её название и вакансию, если фирма не меняется то просто вакансию
     
    viktor72 нравится это.
  3. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    viktor72 нравится это.
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Сдается мне, автору просто нужен GROUP_CONCAT;
     
    viktor72 нравится это.
  5. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    спасибо. разобрал
    --- Добавлено ---
    Спасибо. то что надо..
    --- Добавлено ---
    Как посоветовали добрые люди, сделал. Теперь у меня есть два варианта решить одну задачу.
    PHP:
    1. <?php
    2.  
    3. $sql = "SELECT rd.idrd, rd.rd, GROUP_CONCAT(DISTINCT vakans.vakans SEPARATOR ', ') AS vakans
    4. FROM rd
    5. LEFT JOIN vakans ON rd.idrd = vakans.rd_idrd
    6. GROUP BY rd.idrd";
    7. $query = mysqli_query($db, $sql);
    8. while($row = mysqli_fetch_array($query)){
    9.     echo '<br>'."$row[rd]".'<br>';
    10.     echo "$row[vakans]".', ';
    11. }
    12. ?>
    и
    PHP:
    1. <?php
    2. $sel2 = "SELECT * FROM rd, vakans WHERE rd.idrd = vakans.rd_idrd";
    3. $qwer2 = mysqli_query($db, $sel2);
    4.  
    5. do{
    6.     if($type!=$row3[rd]){
    7.         $type = $row3[rd];
    8.         echo '<br>'."$type".':<br>';
    9.        
    10.     }
    11.    
    12.     echo "$row3[vakans]".', ';
    13. }while($row3 = mysqli_fetch_array($qwer2));
    14.  
    15. ?>
    Интуитивно чувствую , что первый вариант правильней. Я где то читал, что желательнее все решать на уровне базы а не на уровне кода.

    Прошу оценить какой вариант правильнее с точки зрения скорости, трафика, нагрузки на сервер и т.д.
    Спасибо.

    п.с. во втором варианте не приятный момент - вывод в браузер начинается с запятой. понятно для серьезного проекта это не годится. Как бы сделать чтоб не вылазели запятые до или когда ужевывод закончился.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не юзай do...while. Никогда. И выкинь поповщину, по которой учишься.
    --- Добавлено ---
    Из двух вариантов выбирай тот, который тебе удобнее, вот и все.
     
    viktor72 нравится это.
  7. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Предам анафеме попова!
    Вообще то , в поповскую секту я попал по ссылке , не изучал я его.
    А что касается оптимизации, правильнотси и прочего, как правильнее?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    На глаз, первое понятнее и проще в сопровождении, когда вернешься к этому фрагменту кода спустя какое-то время. А именно по скорости и тд...хз, замеряй:)
    --- Добавлено ---
    Но, скажу я тебе, сейчас вообще пофиг. Вот когда начнутся тормоза, тогда начнешь думать, откуда они растут. А сейчас тебе даже индексы не нужны.
     
    viktor72 нравится это.
  9. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Как же оно без индексов? или я чего не опнимаю. первиный ключи и индекс это одно и тоже или нет? id = индекс ? или я ещё не постиг?
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    viktor72 нравится это.