Сортировка таблицы HTML с помощью PHP после ввода из базы данных - PullRequest
2 голосов
/ 16 декабря 2011

Я создаю таблицу HTML со строками данных из базы данных MySQL и некоторыми вычисляемыми значениями, например:

    <?php

$connection = mysql_connect('localhost','root','') or die('Connection failed!');
mysql_select_db('MyDB', $connection);
$result = mysql_query('SELECT * FROM DB_TABLE');

?>

<table>
  <tr>
    <th scope="col">Heading 1</th>
    <th scope="col">Tariefplan</th>
    <th scope="col">Abonnementskost</th>
    <th scope="col">Maandelijkse korting</th>
    <th scope="col">Contractduur</th>
    <th scope="col">Inbegrepen in bundel</th>
    <th scope="col">Tarieven buiten bundel</th>
    <th scope="col"></th>

    <th scope="col">Bereken minuten</th>
    <th scope="col">Bereken SMS'en</th>
    <th scope="col">Bereken MB's</th>
    <th scope="col"></th>

    <th scope="col">Totale prijs normaal</th>
    <th scope="col">Totale prijs promotie</th>
    <th scope="col">Totale prijs contract</th>
  </tr>

<?php
while ($data = mysql_fetch_assoc($result)) {
?>
    <tr>
        <th scope="row"><?php echo $data['provider']; ?></th>
        <td><?php echo $data['planname']; ?></td>
        <td>&euro; <?php echo $data['price_normal']; ?> per maand<br />
            <sub>gedurende <?php echo ($data['contract_duration']-$data['promo_duration']); ?> maanden</sub></td>
        <td>- &euro; <?php echo $data['promo_discount']; ?> per maand<br />
            <sub>gedurende <?php echo $data['promo_duration']; ?> maanden</sub><br />
            <sub>promotie geldig tot <?php echo $data['promo_valid']; ?></sub></td>
        <td><?php echo $data['contract_duration']; ?> maanden</td>
        <td>
            <ul>
                <li><?php echo $data['included_min']; ?> minuten</li>
                <li><?php echo $data['included_sms']; ?> SMS'en</li>
                <li><?php echo $data['included_mb']; ?> MB's</li>
                <li>&euro; <?php echo $data['included_value']; ?> belwaarde</li>
            </ul>
        </td>
        <td>
            <ul>
                <li>&euro; <?php echo $data['price_min']; ?> per minuut</li>
                <li>&euro; <?php echo $data['price_sms']; ?> per SMS</li>
                <li>&euro; <?php echo $data['price_mb']; ?> per MB</li>
            </ul>
        </td>
        <td></td>


        <td>
            <?php
                if ($_POST['used_min'] <= $data['included_min']) {
                    $calc_min = 0;
                }
                else {
                    $calc_min = ($_POST['used_min'] - $data['included_min']) * $data['price_min'];
                }
                echo '&euro; ' . $calc_min;
            ?>
        </td>
        <td>
            <?php
                if ($_POST['used_sms'] <= $data['included_sms']) {
                    $calc_sms = 0;
                }
                else {
                    $calc_sms = ($_POST['used_sms'] - $data['included_sms']) * $data['price_sms'];
                }
                echo '&euro; ' . $calc_sms;
            ?>
        </td>
        <td>
            <?php
                if ($_POST['used_mb'] <= $data['included_mb']) {
                    $calc_mb = 0;
                }
                else {
                    $calc_mb = ($_POST['used_mb'] - $data['included_mb']) * $data['price_mb'];
                }
                echo '&euro; ' . $calc_mb;
            ?>
        </td>
        <td></td>


        <td>
            <?php
                $used_total = ($calc_min + $calc_sms + $calc_mb);
                if ($data['included_value'] > $used_total) {
                    $total_price_normal = $data['price_normal'];
                }
                else {
                    $total_price_normal = ($data['price_normal'] + $used_total);
                }
                echo '&euro; ' . $total_price_normal . ' per maand';
            ?>
        </td>
        <td>
            <?php
                $total_price_discount = ($total_price_normal - $data['promo_discount']);
                echo '&euro; ' . $total_price_discount . ' per maand';
            ?>
        </td>
        <td>
            <?php
                $total_price_contract = ($total_price_normal * ($data['contract_duration']-$data['promo_duration'])) + ($total_price_discount * $data['promo_duration']);
                echo '&euro; ' . $total_price_contract . ' per maand ' . $data['contract_duration'] . ' na maanden';
            ?>
        </td>
    </tr>
<?php } ?>
</table>

Последний столбец в таблице - это переменное значение, которое вычисляет общую сумму,Это НЕ указано в базе данных.Я хочу вывести эту таблицу на страницу браузера, и пусть это будет сортировка по последнему столбцу.

С PHP sort() или asort() функция, которая не работает нормально.

Кто-то делаетесть решение?

Ответы [ 5 ]

3 голосов
/ 16 декабря 2011

Выполните вычисление в запросе SQL, и пусть база данных обработает сортировку

2 голосов
/ 16 декабря 2011

Это возможно, но может быть сложно сделать это с помощью PHP. Для быстрого исправления вы можете попробовать это решение jquery, которое делает то, что вы хотите, и очень быстро работает.

http://tablesorter.com/docs/#Demo

2 голосов
/ 16 декабря 2011

Я думаю, было бы лучше, если бы вы сначала просмотрели результаты, выполнили расчеты и поместили все в массив.Затем вы можете отсортировать массив так, как вам нужно, с помощью любой функции PHP и вывести его.Лучше всего при таком подходе, у вас будет более чистый вывод таблицы, потому что все вычисления и прочее выполняются вне вывода HTML;)

Другая идея состоит в том, что вы делаете это так, как вы делали выше, изатем используйте сортировщик таблиц в ie Javascript / jQuery для последующей сортировки строк.

2 голосов
/ 16 декабря 2011

Сначала вы должны рассчитать значения, а затем создать таблицу. Или используйте какой-нибудь JavaScript. Таким образом, вам нужно пройти через $ result и поместить рассчитанные значения в массив, после чего вы можете отсортировать и распечатать таблицу со значениями, отсортированными по последнему значению.

1 голос
/ 16 декабря 2011

С PHP-функцией sort () или asort (), которая не работает нормально.

, если вы предполагаете, что сортировка будет выглядеть так 1, 10, 12, 2, вы можете использовать natsort (). 1008 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...