Объединение строк одинакового значения вместе - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть соединение ODBC, где я выполняю запрос в PHP .5 таблиц объединяются для получения необходимых мне данных, и используются только 4 столбца или «ВЫБРАН» из 95 столбцов.

Проблема в том, что я получаю одни и те же «имена пользователей» и «управление» несколько раз, потому что каждыйУ пользователя есть несколько данных в столбце «permType» и других столбцах, которые я сейчас не использую.Сам код работает, единственная проблема - это столбец ..


Это SQL Server, использующий Microsoft SQL Server Management Studio, 2008 R2

Я пытался сгруппировать их, используя «GROUP BY» в SQL, но получаю ошибку:

Недопустимый столбец «ID» в списке выбора, поскольку он не содержится влибо агрегатная функция, либо предложение GROUP BY.

Я погуглил эту ошибку, но не смог заставить ее работать из найденных ответов ..

Похоже, я "Я перепробовал все, что нашел в google / stackoverflow.


Таблица выглядит сейчас примерно так:

Имя |Управление |PermType

Джон Доу |Orderperm |ПК Пермь
Джон Доу |Orderperm |Телефонная перми
Джон Доу |Orderperm |Разрешение Пермь
Ash Ketcu |SomeOrder |ПК Пермь
Ash Ketcu |SomeOrder |Телефонная пермь
Ash Ketcu |SomeOrder |Разрешение Пермь


Но я хочу, чтобы это выглядело так:

Имя |Управление |PermType

Джон Доу |Orderperm |ПК Пермь, Телефон Пермь, Разрешение Пермь
Ash Ketcu |SomeOrder |Пермь ПК, Пермь телефона, Разрешение Perm


Вот некоторые из кодов:


**//I do odbc fetch, and echo out a table:**

while ($row = odbc_fetch_array($result)) {
 echo "<tr>";
    echo "<td>" . utf8_encode($row[$Firstname]) . " " . utf8_encode($row[$Lastname]) . "</td>";
    echo "<td>" . utf8_encode($row[$Management]) . "</td>";
    echo "<td>" . utf8_encode($row[$PermType] ). "</td>";
 echo "<tr>";
}


//The SQL:

SELECT
PT.NAME AS PERMTYPE,
R.MANAGE AS MANAGEMENT,
R.FIRST_NAME AS FIRSTNAME,
R.LAST_NAME AS LASTNAME

FROM WEBORDER_PRODUCTTYPESLINKS PL
INNER JOIN WEBORDER_PRODUCTTYPES PT ON PT.ID = PL.IDPRODUCTTYPE
INNER JOIN WEBORDER_INDIVIDUALPERM_TYPES IT ON IT.IDPRODUCTTYPE = PT.ID
INNER JOIN C_CONTACT_PERSONS R ON R.MASTER_ID = IT.IDMANAGER AND (R.CODE = 1)
where R.MANAGEMENT <> 'NULL' and PT.ID between 65 and 72


Может быть, в PHP вместо sulutionпытаясь сгруппировать их в SQL и затем представить данные в PHP?

Я рад любым предложениям!


ОБНОВЛЕНИЕ

Удалось добиться некоторого прогресса, единственная проблема сейчас заключается в том, что одно и то же значение в столбце «PermType» отображается примерно 100 раз.Не могу понять, что именно я делаю здесь неправильно ..

This is what my table looks like right now:
+-----------+------------+-----------+---------------------------------+
| FIRSTNAME | LASTNAME   | MANAGEMENT| PermType                        |
+-----------+------------+-----------+---------------------------------+
| Ash Ketcu | SomeOrder  | SomeOrder | PC perm, PC permPC, PC permPC...|
| John Doe  | Orderperm  | Orderperm | PC perm, PC permPC, PC permPC...|
+-----------+------------+---------------------------------------------+

SELECT
R.FIRST_NAME,
R.LAST_NAME,
R.MANAGEMENT,
PERMTYPE = 
    (
    SELECT ', ' + PT.NAME
        FROM WEBORDER_PRODUCTTYPESLINKS PL
            INNER JOIN WEBORDER_PRODUCTTYPES PT ON PT.ID = PL.IDPRODUCTTYPE
            INNER JOIN WEBORDER_INDIVIDUALPERM_TYPES IT ON IT.IDPRODUCTTYPE = PT.ID
            INNER JOIN C_CONTACT_PERSONS R ON R.MASTER_ID = IT.IDMANAGER 
        WHERE PT.ID BETWEEN 65 AND 72
        FOR XML PATH('')
        )

FROM C_CONTACT_PERSONS R
WHERE R.MANAGEMENT <> 'NULL'

Я благодарен за любой вклад:)!

1 Ответ

1 голос
/ 23 сентября 2019

Вы можете сделать это полностью с MySQL следующим образом:

CREATE TABLE group_test (Name VARCHAR(255), Management VARCHAR(255), PermType VARCHAR(255));

INSERT INTO group_test (Name, Management, PermType) VALUES
("John Doe","Orderperm","PC perm"),
("John Doe","Orderperm","Telephone perm"),
("John Doe","Orderperm","Permission Perm"),
("Ash Ketcu","SomeOrder","PC perm"),
("Ash Ketcu","SomeOrder","Telephone perm"),
("Ash Ketcu","SomeOrder","Permission Perm");

SELECT Name, Management, GROUP_CONCAT(PermType) FROM group_test GROUP BY Name, Management;

+-----------+------------+----------------------------------------+
| Name      | Management | GROUP_CONCAT(PermType)                 |
+-----------+------------+----------------------------------------+
| Ash Ketcu | SomeOrder  | PC perm,Telephone perm,Permission Perm |
| John Doe  | Orderperm  | PC perm,Telephone perm,Permission Perm |
+-----------+------------+----------------------------------------+
2 rows in set (0,00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...