За последние 24 часа нас посетили 18659 программистов и 1689 роботов. Сейчас ищут 1459 программистов ...

нужна помощь в запросе Select

Тема в разделе "PHP и базы данных", создана пользователем demon-mc, 20 ноя 2013.

  1. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    прошу помощи
    имеется таблица 'chenel' базы данных:

    id | name | chenel
    1 | Pupkin | main, work
    2 | vasya | main
    3 | petya | group, work



    нужно чтобы выводило как:

    каналы | модераторы | Имена через запятую|
    main | 2 | Pupkin, vasya
    work | 2 | Pupkin, petya
    group | 1 | petya


    Какой запрос нужно сделать
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    те. поле chenel хранит список каналов через запятую?
    тогда по простому никак
     
  3. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    да так и есть, скажи есть другие варианты вывода, если поменять запятую на чтото другое
    нужно как то разделить эту ячейку
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    не нужно хранить такие списки вообще.
    для отдельного значения делайте отдельноую строку в бд.
    т.е. у вас должно быть так в БД
    тогда ваша задача решится просто
    Код (Text):
    1.  
    2. SELECT chenel, count(*)  cnt, group_concat(name) as chanels
    3. FROM `chenel_table`
    4. group by chenel
     
  5. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    да ето ясно))) скажи а можно ли сделать таблицу 2 и как то записать значения из первой в том формате как ты привел
    первая таблица просто используется в других скриптах
    а если использовать метод http://php.ru/manual/function.explode.html
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    если есть большое желание - то можно сдеалть это ручками(на php).
    тоесть выбираем данные как они есть
    проходим по циклу по записям. поле chenel разбиваем по запятой через explode()
    формируем необходимый нам массив. с нужной группировкой
     
  7. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    сделал следующее
    Код (Text):
    1. $chenel = explode(", ", $row["chenel"] );
    2. echo " ".$chenel[0].", ";
    Выводится следующее:
    Код (Text):
    1. ~Terraria~, rammstein, Ты+я=любовь, Ты+я=любовь, торговый и его друзья, СОК Колымский , смех да и только, Радио Record, Радио Radost, Радио Radost, Профессиональный лицей № 1, Мобильные устройства, Лицей №1 9 класс А, Ленинград, Клуб Братина, Клуб Братина , Кино, Каста, Ил-2 Штурмовик, Знакомства, для позитивных людей=)),
    теперь вопрос как убрать из $chenel[0] повторяющиеся каналы)))
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    array_unique()
    Это гибельный путь — создавать кривую базу и потом все манипуляции с данными перекладывать на PHP. По мере усложнения задачи, попаболь будет увеличиваться в геометрической прогрессии. Надо базу прямыми руками делать.
     
  9. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    Помогли решить мою проблему
    Код (Text):
    1. SELECT g_1 as chenel,COUNT(g_1) as m_count,group_concat(name1 separator ', ') as g_names FROM ((SELECT `name` as name1,SUBSTRING_INDEX(chenel,', ',1) as g_1 FROM chenel) UNION (SELECT `name` as name1,SUBSTRING_INDEX(SUBSTRING_INDEX(chenel, ', ', 2), ', ', -1) as g_1 FROM chenel)) as t1 GROUP BY g_1

    теперь вопрос другой как сделать из данного вывода:
    /Pupkin, vasya

    echo "<td><a href='/".$row["name"]."'>".$row["g_names"]."</a></td>";
    чтобы на каждого отдельного модератора можно было сделать ссылку по пути href='/".$row["name"]."'
     
  10. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а если Имен через запятую больше чем два - разве оно будет нормально работать?
     
  11. demon-mc

    demon-mc Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    7
    Симпатии:
    0
    блин не все имена выводит больше двух не идет где поправить???

    я так понял нужно добовлять еще запросы
    Код (Text):
    1. UNION (SELECT `title` as title1,SUBSTRING_INDEX(SUBSTRING_INDEX(chenel, ', ', 3), ', ', -1) as g_1 FROM dle_dt_tracks)
    2. UNION (SELECT `title` as title1,SUBSTRING_INDEX(SUBSTRING_INDEX(chenel, ', ', 4), ', ', -1) as g_1 FROM dle_dt_tracks)
    3. UNION (SELECT `title` as title1,SUBSTRING_INDEX(SUBSTRING_INDEX(chenel, ', ', 5), ', ', -1) as g_1 FROM dle_dt_tracks)
    4. UNION (SELECT `title` as title1,SUBSTRING_INDEX(SUBSTRING_INDEX(chenel, ', ', 6), ', ', -1) as g_1 FROM dle_dt_tracks)
    но тогда какая нагрузка будет на базу
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям