Mysql-запрос

Discussion in 'PHP' started by попугай, 3 Dec 2013.

  1. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Есть база, где записи содержатся не каждый на строке, а каждая строка - одна запись и объединены одним ID.

    Например,
    ID DATA ID_ELEM ID_DATA
    1 John Smith 1 5
    2 USA 2 5
    3 Texas 3 5
    4 [email protected] 4 5
    5 Pierre LaCroi 1 6
    6 France 2 6
    7 Paris 3 6
    8 [email protected] 4 6
    9 +25557675544 5 6
    10 ....................

    и т.д.

    Как видно, каждый клиент имеет свой ID_DATA.
    Как мне привести их в удобночитаемый вид - строка в строке? Средствами mysql непосредственно.
     
  2. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Нужна агрегатная функция конкатенации строк.
    Т.е. запрос будет выглядить так, абстрактно

    Code:
    select concat(data) from t1 group by  ID_DATA
    , я когда-то пытался написать свою в ms sql, но есть альтерантивные решения через XML - это всё, конечно, изъебы ms sql'а

    Так же предлагаю обратиться к курсорам.

    У тебя какая субд?

    стучи в асю - подскажу по популярнум субд или продолжай тред тут
     
    #2 4upakabr0, 3 Dec 2013
    Last edited: 3 Dec 2013
  3. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196

    Спасибо, но не сработало. Поискал немного. Конкатенация нужна другая.

    select group_concat(DATA) from shop group by ID_ELEM

    Вроде работает и объединило то, что нужно. Могут быть какие ошибки в этом?
     
  4. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    ID_ELEM?
    Наверное ID_DATA
     
  5. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Нет, ошибок не будет. Всё верно сделал. В рамках уникального D_ELEM ты соберешь в этой строке все значения из столбца DATA соответственно.
     
    1 person likes this.
  6. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Art!P, да ты прав. В моей базе то я правильно составил все, а тут тупанул. :rolleyes:
    Спасибо.
    возникла еще проблема - тот запрос вроде работает, объединяет записи с одним ID_DATA, но как упорядочить их по возрастанию по ID_ELEM ?

    PHP:
    select group_concat(DATAfrom   shop  group by ID_DATA order by ID_ELEM asc limit 500
    Этот запрос не упорядочивает их.
     
  7. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    328
    Likes Received:
    591
    Reputations:
    764
    М.б.
    Code:
    select group_concat(DATA) data from (select *  from shop  order by ID_DATA, ID_ELEM)k group by ID_DATA   limit 500
    
     
    #7 nikp, 5 Dec 2013
    Last edited: 5 Dec 2013
    4 people like this.
  8. 4upakabr0

    4upakabr0 Member

    Joined:
    14 May 2008
    Messages:
    124
    Likes Received:
    23
    Reputations:
    0
    Ниже nikp предложил решение на ОК: использовать подзапросы. Должно выглядеть так:

    Code:
    select group_concat(sq.DATA) from
        ( select * from shop order by ID_ELEM asc limit 500 ) sq
    group by sq.ID_DATA
     
Loading...
Similar Threads - Mysql запрос
  1. GAiN
    Replies:
    3
    Views:
    7,523