[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка таблицы
slavig
Помогите с сортировкой таблицы. В низу кода добавил обычную таблицу - она сортируется, а та что надо выше - не сортируется. Скрипт берет MAC адреса компьютеров из текстового файла (в файле они размещены в столбик) и сравнивает их с теми что в базе MySQL, те что совпадают выводятся с данными из базы, тоесть улица, имя, логин и т.д. Хочу сделать чтобы можно было сортировать по улице или имени и т.д.., а то все данные в таблице выводятся строго как MAC адреса размещены в текстовом файле. Javascript в шапке.


<?php
$db=mysql_connect("localhost", "root", "пароль");
mysql_select_db("база");
mysql_query("SET names koi8r");

print
("
<html>
<head>
<title>TITLE</title>
<link href='style.css' type=text/css rel=stylesheet>
<script type='text/javascript'>
<!--
/*
originally written by paul sowden <paul@idontsmoke.co.uk> | http://idontsmoke.co.uk
modified and localized by alexander shurkayev <alshur@ya.ru> | http://htmlcssjs.ru
*/

var img_dir = '/i/'; // папка с картинками
var sort_case_sensitive = false; // вид сортировки (регистрозависимый или нет)

// ф-ция, определяющая алгоритм сортировки
function _sort(a, b) {
var a = a[0];
var b = b[0];
var _a = (a + '').replace(/,/, '.');
var _b = (b + '').replace(/,/, '.');
if (parseFloat(_a) && parseFloat(_b)) return sort_numbers(parseFloat(_a), parseFloat(_b));
else if (!sort_case_sensitive) return sort_insensitive(a, b);
else return sort_sensitive(a, b);
}

// ф-ция сортировки чисел
function sort_numbers(a, b) {
return a - b;
}

// ф-ция регистронезависимой сортировки
function sort_insensitive(a, b) {
var anew = a.toLowerCase();
var bnew = b.toLowerCase();
if (anew < bnew) return -1;
if (anew > bnew) return 1;
return 0;
}

// ф-ция регистрозависимой сортировки
function sort_sensitive(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}

// вспомогательная ф-ция, выдирающая из дочерних узлов весь текст
function getConcatenedTextContent(node) {
var _result = '';
if (node == null) {
return _result;
}
var childrens = node.childNodes;
var i = 0;
while (i < childrens.length) {
var child = childrens.item(i);
switch (child.nodeType) {
case 1: // ELEMENT_NODE
case 5: // ENTITY_REFERENCE_NODE
_result += getConcatenedTextContent(child);
break;
case 3: // TEXT_NODE
case 2: // ATTRIBUTE_NODE
case 4: // CDATA_SECTION_NODE
_result += child.nodeValue;
break;
case 6: // ENTITY_NODE
case 7: // PROCESSING_INSTRUCTION_NODE
case 8: // COMMENT_NODE
case 9: // DOCUMENT_NODE
case 10: // DOCUMENT_TYPE_NODE
case 11: // DOCUMENT_FRAGMENT_NODE
case 12: // NOTATION_NODE
// skip
break;
}
i++;
}
return _result;
}

// суть скрипта
function sort(e) {
var el = window.event ? window.event.srcElement : e.currentTarget;
while (el.tagName.toLowerCase() != 'td') el = el.parentNode;
var a = new Array();
var name = el.lastChild.nodeValue;
var dad = el.parentNode;
var table = dad.parentNode.parentNode;
var up = table.up;
var node, arrow, curcol;
for (var i = 0; (node = dad.getElementsByTagName('td').item(i)); i++) {
if (node.lastChild.nodeValue == name){
curcol = i;
if (node.className == 'curcol'){
arrow = node.firstChild;
table.up = Number(!up);
}else{
node.className = 'curcol';
arrow = node.insertBefore(document.createElement('img'),node.firstChild);
table.up = 0;
}
arrow.src = img_dir + table.up + '.gif';
arrow.alt = '';
}else{
if (node.className == 'curcol'){
node.className = '';
if (node.firstChild) node.removeChild(node.firstChild);
}
}
}
var tbody = table.getElementsByTagName('tbody').item(0);
for (var i = 0; (node = tbody.getElementsByTagName('tr').item(i)); i++) {
a[i] = new Array();
a[i][0] = getConcatenedTextContent(node.getElementsByTagName('td').item(curcol));
a[i][1] = getConcatenedTextContent(node.getElementsByTagName('td').item(1));
a[i][2] = getConcatenedTextContent(node.getElementsByTagName('td').item(0));
a[i][3] = node;
}
a.sort(_sort);
if (table.up) a.reverse();
for (var i = 0; i < a.length; i++) {
tbody.appendChild(a[i][3]);
}
}

// ф-ция инициализации всего процесса
function init(e) {
if (!document.getElementsByTagName) return;

for (var j = 0; (thead = document.getElementsByTagName('thead').item(j)); j++) {
var node;
for (var i = 0; (node = thead.getElementsByTagName('td').item(i)); i++) {
if (node.addEventListener) node.addEventListener('click', sort, false);
else if (node.attachEvent) node.attachEvent('onclick', sort);
node.title = 'Sort';
}
thead.parentNode.up = 0;

if (typeof(initial_sort_id) != 'undefined'){
td_for_event = thead.getElementsByTagName('td').item(initial_sort_id);
if (document.createEvent){
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', false, false, window, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, td_for_event);
td_for_event.dispatchEvent(evt);
} else if (td_for_event.fireEvent) td_for_event.fireEvent('onclick');
if (typeof(initial_sort_up) != 'undefined' && initial_sort_up){
if (td_for_event.dispatchEvent) td_for_event.dispatchEvent(evt);
else if (td_for_event.fireEvent) td_for_event.fireEvent('onclick');
}
}
}
}

// запускаем ф-цию init() при возникновении события load
var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root){
if (root.addEventListener) root.addEventListener('load', init, false);
else if (root.attachEvent) root.attachEvent('onload', init);
}
//-->
</script>
</head>

<body>
"
);

$mac=file("mac.txt");

print("<center><h3>MAC in Network</h3></center>");
print("<table class='sort' id='myTable' width='100%' border='1' cellpadding='0' cellspacing='0' align='center'>");
print("<thead><tr><td><b>Num</b><td align=center><b>Login</b></td><td><b><center>FIO</center> ;</b></td><td><b><center>Address</center></b></td>< ;td><b><center>IP</center></b></td><td><b><center> MAC</center></b></td><td><b><center>Depozit</b></center& gt;</td></tr></thead>\n");

foreach($mac as $macc)
{
$macok=preg_split ("/[\s]+/",$macc);

$n++;

$Row=mysql_fetch_array(mysql_query("

SELECT

abon.first_name,
abon.second_name,
abon.third_name,
streets.street,
abon.house,
abon.login,
abon.apartment,
abon.depozit,
comp.mac,
comp.ip

FROM

abon,comp,streets

WHERE

streets.id=abon.street AND
abon.id=comp.user AND
comp.mac='
$macok[0]'
"
));

print("<tbody><tr><td>$n</td><td>$Row[login]</td><td nowrap>$Row[first_name] $Row[second_name] $Row[third_name]</td><td nowrap>$Row[street] $Row[house] $Row[apartment]</td><td>$Row[ip]</td><td>$macok[0]</td><td>$Row[depozit]</td></tr>\n");
}
print("</tbody></table><br>");

print("
<table class='sort' align='center'>
<thead>
<tr>
<td>ID</td>
<td>4</td>
<td>3</td>
<td>5</td>
<td>6</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>aaaaaaa</td>
<td>bbbbbbb</td>
<td>cccccccccc</td>
<td>dddddddd</td>
</tr>

<tr>
<td>33</td>
<td>rrrr</td>
<td>hhgfgggg</td>
<td>ggggggggg</a></td>
<td>jjjjjjjj</td>
</tr>
</tbody>
</table>"
);

print
("
</body></html>
"
);

?>




Спустя 20 часов, 44 минуты, 47 секунд (12.07.2012 - 12:36) slavig написал(а):
Ну что, кто-то поможет с проблемой?

Спустя 2 часа, 16 минут, 35 секунд (12.07.2012 - 14:52) justyork написал(а):
А в чем проблема?
Передаешь 2 параметра
1. что сортируем. sort=street
2. как сортируем type=desc

вот будет урл /index.php?sort=street&type=desc

ну и формируешь запрос
$query = "SELECT * FROM ... ORDER BY '{$_GET['sort']}' {$_GET['type']}";

вот и все и формируй таблицу как надо

Спустя 16 минут, 41 секунда (12.07.2012 - 15:09) slavig написал(а):
В том то и дело что не сортируется ни через ORDER BY, ни через джава скрипт. Посмотрите внимательней код.

Спустя 11 часов, 46 минут, 4 секунды (13.07.2012 - 02:55) justyork написал(а):
SELECT `abon`.*, `streets`.*, `comp`.*
FROM `abon`
INNER JOIN `comp`
ON `abon`.`id` = `comp`.`user`
INNERT JOIN `streets`
ON `abon`.`street` = `streets`.`id`
WHERE `comp`.`mac` = '{$macok[0]}'
ORDER BY `streets`.`id` DESC

Спустя 8 часов, 17 минут, 1 секунда (13.07.2012 - 11:12) slavig написал(а):
Сделал так, всеравно не сортируется, может проблема в том что таблица по частям разбита кавычками {}, если дописать or die(mysql_error()), то в таблице выводится только одна строчка.

Спустя 3 дня, 33 минуты, 27 секунд (16.07.2012 - 11:46) slavig написал(а):
Поможет кто-то то с проблемой?

Спустя 8 дней, 3 часа, 14 минут (24.07.2012 - 15:00) Guest написал(а):
up!

Спустя 1 месяц, 25 дней, 20 часов, 44 минуты, 58 секунд (20.09.2012 - 11:45) slavig написал(а):
up!

Спустя 7 часов, 6 минут, 31 секунда (20.09.2012 - 18:51) inpost написал(а):
Сделай запрос в PMA, выстави скрин-шот.
Далее укажи поле, по которому надо сортировать, и снова выстави скрин-шот, и в этом скрин-шоте из PMA выдели поле, что оно не так отсортировалось! Хочу увидеть результаты запроса из PMA

Спустя 3 дня, 17 часов, 56 минут, 28 секунд (24.09.2012 - 12:48) slavig написал(а):
Делал запрос через PMA без строки WHERE `comp`.`mac`='{$b[0]}' - сортировалось все отлично по любому полю. В скрипте со строкой WHERE `comp`.`mac`='{$b[0]}' сортируется только так как сортированы маки в текстовом файле.

SELECT

`abon`.*,
`streets`.*,
`comp`.*

FROM

`abon`

INNER JOIN `comp`
ON `abon`.`id` = `comp`.`user`
INNER JOIN `streets`
ON `streets`.`id` = `abon`.`street`

WHERE
`comp`.`mac`='{$b[0]}'

ORDER BY `abon`.`street` DESC

Спустя 7 часов, 26 минут (24.09.2012 - 20:14) slavig написал(а):
HELP user posted image

Спустя 16 дней, 22 часа, 54 минуты, 7 секунд (11.10.2012 - 19:08) Guest написал(а):
up

Спустя 9 минут, 38 секунд (11.10.2012 - 19:17) n58oo написал(а):
<?php
foreach($mac as $macc)
{
}



не получится сортировки, foreach берет записи из текстового файла подряд, тут либо искать другое решение либо избавиться от текстового файла и перенести все в базу

Спустя 2 часа, 46 минут, 54 секунды (11.10.2012 - 22:04) inpost написал(а):
Что за хелп-хелп. Я попросил 3 скрин-шота, а в ответ 0.

Спустя 6 минут, 33 секунды (11.10.2012 - 22:11) slavig написал(а):
Смысла нету выкладывать, ведь через запросы в PMA все сортируется по любому полю, а если сравнивать с маками в текстовом файле, то только строго по порядку как в текстовом файле. текстовый файл генерирует скрипт написанный на perl, буду его допиливать наверно чтоб в базу заносил данные, а не в файл. Другие предложения есть?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.