#php #mysql
#php #mysql
Вопрос:
Я не знаю, как точно описать заголовок вопроса, но вы можете себе представить, что происходит: у меня есть таблица, и я хочу выбрать отдельные данные
A B C
Cat 10 False
Dog 25 True
Dog 20 False
Cat 5 False
когда я использую group by для столбца, и результат будет:
A B C
Cat 5 False
Dog 20 False
Возможно ли сделать такой результат в MySQL:
A B C
Cat 10 False
5 False
Dog 25 True
20 False
или кто-нибудь предполагает, что таблица возвращает мне массив, подобный:
Array(
[Cat]=>Array(
[0]=> Array(
[0]=>10
[1]=>False
)
[1]=> Array(
[0]=>5
[1]=>False
)
)
[Dog]=>Array(
[0]=> Array(
[0]=>25
[1]=>True
)
[1]=> Array(
[0]=>20
[1]=>False
)
)
)
Комментарии:
1. Просто упорядочивайте по столбцу A, если хотите получить все результаты.
2.
ORDER BY A
? Он делает именно то, что вы описали, ноA
значения повторяются3. Вы буквально просите, чтобы значение A выводилось только один раз (с пустыми строками в последующих строках)? Это скорее проблема форматирования, с которой лучше справиться в PHP. В противном случае, да, просто упорядочивайте по A.
4. Я могу вас сгруппировать, но я не хочу, чтобы значение столбца A повторялось, или какие-либо идеи для обработки этого в php
Ответ №1:
Если значение столбца следующей строки совпадает со значением столбца предыдущей строки, вам нужно запомнить предыдущее значение строки, чтобы оно не отображалось снова в следующей строке.
Пример:
select
case when @prev != ( @curr := A ) then ( @prev := @curr ) else '' end as A
, B, C
from(
select * from tbl_soq24465988
order by 1 asc, 2 desc
) sorted_table
, ( select @prev := '', @curr := '' ) initializer
;
Вывод:
------ ------ -------
| A | B | C |
------ ------ -------
| Cat | 10 | False |
| | 5 | False |
| Dog | 25 | True |
| | 20 | False |
------ ------ -------
Демо @ MySQL 5.5.32 Скрипка