Моя проблема проста, но тупиковая. А может и наоборот.
Значит, есть данные из БД. На их основе формируется элементарная таблица (первая таблица на рисунке во вложении). Соответственно надо сделать так, что бы она отображалась, как вторая таблица на рисунке во вложении. То есть после вывода значений первого и второго столбца в строке, не выводить их клоны в нижележащих строках (нужно учесть, что цифры первого столбца могут повторяться, где либо ниже, ну а второй столбец уникален, с ним проблем нет).
Думал в форум по JS обратиться, но может, есть способ именно в php при работе с массивами реализовать это.
Это непосредственно код формирования ячеек в таблице (на лишнее не обращайте внимание, там распарсивается XML и другие, не касающиеся проблемы нюансы):
while ($data = pg_fetch_array($res)) {
//$filename = "/record/{$data['path']}-in-city-{$data['caller']}.mp3";
if (in_array($data['call_type'], array(1, 2))) {
$xml = simplexml_load_string($data['comm']);
$data['comm'] = array();
foreach ($xml->phrase as $phrase) {
if (!empty($phrase->comm)) {
$data['comm'][] = sprintf('<span title="%s" class="t-line">%s</span>', $phrase->comm, $phrase->title);
} else {
$data['comm'][] = $phrase->title;
}
}
$data['comm'] = implode(', ', $data['comm']);
}
echo "<tr>
<td>{$data['count']}</td>
<td>" . sprintf($links[$data['call_type']]['user'], $data['user_id'], $data['user_name']) . "</td>
<td>{$data['agent_num']}</td>
<td>{$data['call_time']}</td>
<td>{$data['user_num']}</td>
<td>{$data['comm']}</td>
<td>" . (($data['dem_id'] > 0) ? sprintf($links[$data['call_type']]['demand'], $data['dem_id'], $data['dem_id']) : '') . "</td>
<td id=\"{$data['id']}\" class=\"player\">
<a href=\"javascript:void(0)\" onclick=\"showAudioPlayer({$data['id']}, '$filename', '{$data['caller']}')\">Показать плеер</a>
<div id=\"player{$data['id']}\"/>
</td>
</tr>";
}
И если интересно, то сама функция:
function rep_incoming_calls_period_list($db) {
echo "<script src=\"/scripts/audio-player.js\" type=\"text/javascript\"></script>
<script type=\"text/javascript\">
AudioPlayer.setup(\"/flash/audioplayer.swf\", {
width: 290,
autostart: \"yes\",
animation: \"no\"
});
</script>";
$sid = $_GET['id'];
$start = isset($_GET['start']) ? $_GET['start'] : date("Y-m-d");
$end = isset($_GET['end']) ? $_GET['end'] : date("Y-m-d");
echo "<form method='get' action=''>
<input type='hidden' name='action' value='{$_GET['action']}' />
<input type='hidden' name='type' value='{$_GET['type']}' />
<table>
<tr>
<td>Начало периода</td>
<td>Конец периода</td>
<td></td>
</tr>
<tr>
<td>
<input type='text' id='data_start' name='start' value='$start' readonly='readonly' size='10' />
<input type='button' value='...' id='trigger_start' />
</td>
<td>
<input type='text' id='data_end' name='end' value='$end' readonly='readonly' size='10' />
<input type='button' value='...' id='trigger_end' />
</td>
<td><input type='submit' value='Показать' /></td>
</tr>
</table>
</form>
<table class='t-list awidth'>
<tr>
<th><div>Количество звонков</div></th>
<th><div>ФИО</div></th>
<th><div>Вн. номер</div></th>
<th><div>Время</div></th>
<th><div>Номер</div></th>
<th><div>Причина</div></th>
<th><div>Оформил</div></th>
<th><div></div></th>
</tr>";
create_calendar();
$sql = "SELECT
c.id as cid, coalesce(dt.cnt,0) AS count,
CASE WHEN call_type = 1 THEN u.full_name WHEN call_type = 2 THEN c.full_name WHEN call_type = 3 THEN e.full_name ELSE '' END as user_name,
c.agent_num, to_char(c.call_time, 'YYYY-MM-DD HH24:MI:SS') as call_time,
CASE WHEN call_type = 1 THEN u.id WHEN call_type = 3 THEN e.id ELSE 0 END as user_id,
c.user_num, c.call_type,
CASE WHEN call_type IN (1, 2) THEN p.phrases ELSE c.comm END as comm,
CASE WHEN call_type IN (1, 2) THEN dem_id ELSE 0 END as dem_id, l.id, l.caller, to_char(l.datestart, 'YYYY/MM/DD/YYYYMMDD-HH24MISS') as path
FROM calls.incoming_calls as c
INNER JOIN users as u ON u.id = c.user_uid
LEFT JOIN (SELECT c.id, count(*) over (partition by c.user_uid) as cnt
FROM calls.incoming_calls as c WHERE call_time<='$end 23:59:59' AND call_time>='$start 00:00:00') AS dt ON dt.id = c.id
LEFT JOIN staff.employees as e ON e.id = c.user_uid
LEFT JOIN ivr.logcalls l ON c.call_parentid=l.id
LEFT JOIN (
SELECT c.id, xmlforest(xmlagg(xmlforest(xmlforest(phrase as title, CASE WHEN p.textarea THEN comm ELSE '' END as comm) as phrase)) as phrases)::character varying as phrases
FROM (SELECT id, unnest(phrases[1:array_upper(phrases, 1)][1:1])::integer as phrase_id, unnest(phrases[1:array_upper(phrases, 1)][2:2]) as comm
FROM calls.incoming_calls as c) as c
INNER JOIN account.phrases as p ON p.id = c.phrase_id
GROUP BY 1) as p ON p.id = c.id
WHERE dt.cnt >= 5 AND call_time<='$end 23:59:59' AND call_time>='$start 00:00:00'
ORDER BY 6, 5 DESC;";
$res = @pg_query($db, $sql) or die_query("Что-то пошло не так", $sql);
$links = array(
1 => array(
'user' => '<a target="_blank" href="?action=view_uc&id=%1$d">%2$s</a>',
'demand' => '<a target="_blank" href="?action=edit_dem&id=%1$d">%2$d</a>',
),
2 => array(
'user' => '%2$s',
'demand' => '<a target="_blank" href="?action=online&id=%1$d">%2$d</a>',
),
3 => array(
'user' => '<a target="_blank" href="?action=emp_edit&id=%1$d">%2$s</a>',
'demand' => '',
),
4 => array(
'user' => '',
'demand' => '',
),
);
while ($data = pg_fetch_array($res)) {
//$filename = "/record/{$data['path']}-in-city-{$data['caller']}.mp3";
if (in_array($data['call_type'], array(1, 2))) {
$xml = simplexml_load_string($data['comm']);
$data['comm'] = array();
foreach ($xml->phrase as $phrase) {
if (!empty($phrase->comm)) {
$data['comm'][] = sprintf('<span title="%s" class="t-line">%s</span>', $phrase->comm, $phrase->title);
} else {
$data['comm'][] = $phrase->title;
}
}
$data['comm'] = implode(', ', $data['comm']);
}
echo "<tr>
<td>{$data['count']}</td>
<td>" . sprintf($links[$data['call_type']]['user'], $data['user_id'], $data['user_name']) . "</td>
<td>{$data['agent_num']}</td>
<td>{$data['call_time']}</td>
<td>{$data['user_num']}</td>
<td>{$data['comm']}</td>
<td>" . (($data['dem_id'] > 0) ? sprintf($links[$data['call_type']]['demand'], $data['dem_id'], $data['dem_id']) : '') . "</td>
<td id=\"{$data['id']}\" class=\"player\">
<a href=\"javascript:void(0)\" onclick=\"showAudioPlayer({$data['id']}, '$filename', '{$data['caller']}')\">Показать плеер</a>
<div id=\"player{$data['id']}\"/>
</td>
</tr>";
}
?>
</table>
<script type="text/javascript">
$(document).ready(function() {
$('.t-list span[title]').tooltip();
$(".t-list tr").mouseover(function(){
$(this).addClass("over");
});
$(".t-list tr").mouseout(function(){
$(this).removeClass("over");
});
});
</script>
<?
}