2010-11-01 52 views
5

bir kez çıktılar. Bunu daha önce yapmış olduğumu düşünüyorum, ama aynı zamanda PHP'nin bir işlevi de olabilir. sipariş edildiği takdirde ne istiyorsunuz (MySQL istemcisi değil, PHP olarak) MySQL sorgusu yapmak veMySQL: Sadece bir kez

Foo A 
Foo B 
Foo C 
Bar B 
Bar D 
Bar E 

Bu elbette sadece Sense yapar ait

Foo A 
     B 
     C 
Bar B 
     D 
     E 

yerine örneğin elde etmektir Bu ilk sütuna göre. Mümkünse, ama dediğim gibi, bir kez bu yapmış hatırlamak istemem ama ... nasıl ya bazı PHP "sihirli" aracılığıyla olsaydı


Güncelleme hatırlamıyorum emin değil : Aniden kullandığım yeri hatırladım. Ne düşündüğüm GROUP BY için WITH ROLLUP değiştiriciydi. Ama Ayrıca burada düşündüğüm şeyi yapmadığını keşfettim, bu yüzden sorum hala geçerli. Her ne kadar şimdi bir çözüm olduğunu düşünmüyorum. Ama akıllı insanlar önce beni yanlış kanıtladık: P


Güncelleme: belki de ben bu istediğini bir çok-çok ilişki olduğunu belirtmiştik mı. Asıl seçim Foo'da bir katılımcının ilk adı olurdu ve ben de soyadı ve diğer bazı sütunları istiyorum. A, B, C, D, E, katılımcının seçtiği seçeneklerdir.

attendee (id, first_name, last_name, ...) 
attendees_options (attendee_id, option_id) 
option (id, name, description) 
+0

Kabul edilebilir - NULL, sıfır uzunluk dizesi? –

+0

Her ikisi de muhtemelen işe yarayacaktı. – Svish

cevap

1

Bu, SQL Server bu test

Foo A,B,C 
Bar B,D,E  

SELECT column1, GROUP_CONCAT(column2) FROM table GROUP BY column1 
+0

Cool, 'group_concat' ifadesini bilmiyordum. Çoklu sütunları, siparişleri ve özel ayırıcıları bile destekler ... Bunu kullanarak son bulabilirsin ... – Svish

0

verecektir, ama MySQL çevirmek düşünüyorum.

create table test (
    id int, 
    col1 char(3), 
    col2 char(1) 
) 

insert into test 
    (id, col1, col2) 
    select 1, 'Foo', 'A' union all 
    select 2, 'Foo', 'B' union all 
    select 3, 'Foo', 'C' union all 
    select 4, 'Bar', 'D' union all 
    select 5, 'Bar', 'E' union all 
    select 6, 'Bar', 'F' 

select case when t.id = (select top 1 t2.id 
          from test t2 
          where t2.col1 = t.col1 
          order by t2.col1, t2.col2) 
      then t.col1 
      else '' 
     end as col1, 
     t.col2 
    from test t 
    order by t.id 

drop table test 
+0

Bazı ayarlamalar gerekiyordu, ama aslında bu örnek için çalıştı. Sanırım her bir sütun için yinelenmiş olabilecek bu büyük 'case' bloklarından birini gerektirir mi? – Svish