mysql> select * from facts;
+----+---------+------------+---------+
| id | fact_id | fact_value | host_id |
+----+---------+------------+---------+
| 1 | 1 | rh5 | 1 |
| 2 | 1 | rh4 | 2 |
| 3 | 2 | virtual | 1 |
| 4 | 2 | virtual | 2 |
| 5 | 3 | rack 2 | 1 |
+----+---------+------------+---------+
mysql> select * from hosts;
+---------+-----------+
| host_id | host_name |
+---------+-----------+
| 1 | bellagio |
| 2 | mirage |
+---------+-----------+
запросе я делает следующее:Отображать результаты MySQL в одном ряду
mysql> select host_name,fact_value from hosts as a left join facts as b on
> b.host_id=a.host_id and b.fact_id in (1,2,3);
+-----------+------------+
| host_name | fact_value |
+-----------+------------+
| bellagio | rh5 |
| bellagio | virtual |
| bellagio | rack 2 |
| mirage | rh4 |
| mirage | virtual |
+-----------+------------+
Я хочу, чтобы результаты печати одну строку для каждого хоста, обратите внимание, как он печатает каждый fact_value на отдельной строке. Причина, почему у меня есть предложение IN
, состоит в том, что эта таблица имеет более 40 возможных столбцов для каждого хоста. Мне нужен только небольшой (я выбираю 3 в этом примере).
Вот что я ищу.
+-----------+--------+-----------+-----------+
| host_name | value1 | value 2 | value 3 |
+-----------+--------+-----------+-----------+
| bellagio | rh5 | virtual | rack 2 |
| mirage | rh4 | virtual | NULL |
+-----------+--------+-----------+-----------+
О, я вижу, что он сделал, фактически позвольте мне отредактировать мое сообщение. Мой плохой, я хотел, чтобы значения в их собственный столбец, чтобы я мог легко анализировать данные в PHP. – luckytaxi
@luckytaxi: а что, если каждый домен имеет разные значения? Во всяком случае, в mysql невозможно сделать для динамического числа значений – zerkms
Но вы могли бы GROUP_CONCAT (CONCAT ('|', fact_value)) и в php, explode ('|', $ data) – symcbean