Типы заказов в разных столбцах таблицы

Это общий вопрос и не имеет никакого отношения к конкретному программному коду.
Тем не менее, это звучит просто, но я не могу понять это.

Предоставление следующей структуры БД:

id  |  name   |  type
1   |  testA  |   A
2   |  testA  |   A
3   |  testA  |   A
4   |  testB  |   B
5   |  testB  |   B

Исходя из этого я хочу создать таблицу, которая будет выглядеть так:

HTML ТАБЛИЦА:

Col A   Col B
testA   testB
testA   testB
testA

поэтому HTML-код будет выглядеть так:

<table>
<tr>
<th>Col A</th>
<th>Col B</th>
</tr>
<tr>
<td>testA</td>
<td>testB</td>
<tr>
<tr>
<td>testA</td>
<td>testB</td>
<tr>
<tr>
<td>testA</td>
<td></td>
<tr>
<table>

Хотя, если у вас есть какое-то решение с использованием встроенного colspan а также rowspan это также приветствуется.

Я не мог найти элегантное решение.

Мой код до сих пор:

// Not Working:

$elements = array('doc'=>array(),'pub'=>array());
$db = new SQLite3('sqlite3.db');
$results = $db->query('SELECT * FROM l ORDER BY type;');
while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
array_push($elements[$row['type']], $row);
}
$fi = array();
for ($i=0;$i<count($elements['pub'])+count($elements['doc']);$i++){
if ($i%2==0){
array_push($fi,$elements['pub'][floor($i/2)]);
}else{
array_push($fi,$elements['doc'][floor($i/2)]);
}
}
var_dump($fi);
exit();
// This is not working because most of the times
// the count of elements from type A
// is NOT equal to elements of type B.

-1

Решение

Нет никакой связи между значениями A / B в одной строке, поэтому мы должны изобрести их.
Это можно сделать с помощью ROWIDs вновь вставленных строк (SELECT просто выполняет полное внешнее соединение):

CREATE TEMPORARY TABLE tempA AS
SELECT name FROM l WHERE type = 'A';

CREATE TEMPORARY TABLE tempB AS
SELECT name FROM l WHERE type = 'B';

SELECT tempA.name, tempB.name
FROM tempA
LEFT JOIN tempB USING (rowid)
UNION ALL
SELECT tempA.name, tempB.name
FROM tempB
LEFT JOIN tempA USING (rowid)
WHERE tempA.name IS NULL;

DROP TABLE tempA;
DROP TABLE tempB;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]