Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस से रिकॉर्ड प्राप्त करते समय गतिशील रोस्पेन

मेरी खराब अंग्रेजी के लिए खेद है:यहाँ मैंने इस प्रश्न का उत्तर दिया था डायनेमिक रोस्पैन के साथ डेटाबेस से डेटा कैसे दिखाएं . एक बार फिर मैं इस प्रश्न का उत्तर देने का प्रयास करता हूँ। पहले ऐसा न हो कि हम mysql क्वेरी पर काम करें।

MySQL कार्य:

Mysql क्वेरी में आपने ऑर्डर के लिए पूछताछ नहीं की है। क्योंकि असल जिंदगी में आप उम्मीद नहीं कर सकते कि टॉम के सारे रिकॉर्ड होने के बाद भी बिल रिकॉर्ड होगा. उदाहरण के लिए निम्नलिखित प्रविष्टि लें।

INSERT INTO test_work(ename, sal) 
               VALUES("tom",  100), 
                     ("bill", 450), 
                     ("bill", 100), 
                     ("tom",  200),
                     ("bill", 250),
                     ("bill", 400),
                     ("James", 50);
SELECT * FROM test_work;

परिणाम:

+-------+------+
| ename | sal  |
+-------+------+
| tom   |  100 |
| bill  |  450 |
| bill  |  100 |
| tom   |  200 |
| bill  |  250 |
| bill  |  400 |
| James |   50 |
+-------+------+

तो आपकी mysql क्वेरी को एनाम द्वारा ऑर्डर किया जाना चाहिए। यहां भी प्रत्येक व्यक्ति की सल आदेश दिया जाना चाहिए। तो हमारी क्वेरी:

SELECT * FROM emp ORDER BY ename, sal;

कोडिंग:

  1. पूरे कार्य को हम 3 भागों में विभाजित कर सकते हैं।
    1. Mysql डेटा को सरणी में लाना और संग्रहीत करना।
    2. रोस्पैन की गणना करना
    3. मुद्रण

MySQL डेटाफ़ेचिंग:

mysql सर्वर से डेटा लाने के दौरान हमें हमेशा mysql_fetch_array के बजाय mysql_fetch_assoc फ़ंक्शन का उपयोग करने का प्रयास करना चाहिए। क्योंकि mysql_fetch_assoc केवल नाम और साल लौटाएगा। लेकिन mysql_fetch_array अनुक्रमित नाम, सैल, 0, 1 के साथ सरणी लौटाएगा।

    # connect to mysql server
    # and select the database, on which
    # we will work.
    $conn = mysql_connect('', 'root', '');
    $db   = mysql_select_db('test');

    # Query the data from database.
    $query  = 'SELECT * FROM test_work ORDER BY ename, sal';
    $result = mysql_query($query);

    # Intialize the array, which will 
    # store the fetched data.
    $sal = array();
    $emp = array();

    # Loop over all the fetched data, and save the
    # data in array.
    while($row = mysql_fetch_assoc($result)) {
        array_push($emp, $row['ename']);
        array_push($sal, $row['sal']);
    }

पंक्ति अवधि की गणना करना:

    # Intialize the array, which will store the 
    # rowspan for the user.
    $arr = array();

    # loop over all the sal array
    for ($i = 0; $i < sizeof($sal); $i++) {
        $empName = $emp[$i];

        # If there is no array for the employee
        # then create a elemnt.
        if (!isset($arr[$empName])) {
            $arr[$empName] = array();
            $arr[$empName]['rowspan'] = 0;
        }

        $arr[$empName]['printed'] = "no";

        # Increment the row span value.
        $arr[$empName]['rowspan'] += 1;
    }

जब आप एरर ऐरे को प्रिंट_आर करेंगे तो आउटपुट होगा:

Array
(
    [bill] => Array
        (
            [rowspan] => 4
            [printed] => no
        )

    [James] => Array
        (
            [rowspan] => 1
            [printed] => no
        )

    [tom] => Array
        (
            [rowspan] => 2
            [printed] => no
        )

)

रोस्पैन के साथ प्रिंट करना:

    echo "<table cellspacing='0' cellpadding='0'>
            <tr>
                <th>Ename</th>
                <th>Sal</th>
            </tr>";


    for($i=0; $i < sizeof($sal); $i++) {
        $empName = $emp[$i];
        echo "<tr>";

        # If this row is not printed then print.
        # and make the printed value to "yes", so that
        # next time it will not printed.
        if ($arr[$empName]['printed'] == 'no') {
            echo "<td rowspan='".$arr[$empName]['rowspan']."'>".$empName."</td>";
            $arr[$empName]['printed'] = 'yes';
        }
        echo "<td>".$sal[$i]."</td>";
        echo "</tr>";
    }
    echo "</table>";

कोड अनुकूलन:

अब हम Rowpan गणना और mysql डेटा लाने को जोड़ सकते हैं। क्योंकि प्राप्त डेटा को सरणी में सहेजने के दौरान हम रोस्पेन की गणना कर सकते हैं। तो हमारा अंतिम कोड:

<!DOCTYPE html>
<html>
    <head>
        <style>
            table tr td, table tr th{
                border: black 1px solid;
                padding: 5px;
            }
        </style>
    </head>
    <body>
        <?php
        # connect to mysql server
        # and select the database, on which
        # we will work.
        $conn = mysql_connect('', 'root', '');
        $db   = mysql_select_db('test');

        # Query the data from database.
        $query  = 'SELECT * FROM test_work ORDER BY ename, sal';
        $result = mysql_query($query);

        # $arr is array which will be help ful during 
        # printing
        $arr = array();

        # Intialize the array, which will 
        # store the fetched data.
        $sal = array();
        $emp = array();

        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
        #     data saving and rowspan calculation        #
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#

        # Loop over all the fetched data, and save the
        # data.
        while($row = mysql_fetch_assoc($result)) {
            array_push($emp, $row['ename']);
            array_push($sal, $row['sal']);

            if (!isset($arr[$row['ename']])) {
                $arr[$row['ename']]['rowspan'] = 0;
            }
            $arr[$row['ename']]['printed'] = 'no';
            $arr[$row['ename']]['rowspan'] += 1;
        }


        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        #        DATA PRINTING             #
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
        echo "<table cellspacing='0' cellpadding='0'>
                <tr>
                    <th>Ename</th>
                    <th>Sal</th>
                </tr>";


        for($i=0; $i < sizeof($sal); $i++) {
            $empName = $emp[$i];
            echo "<tr>";

            # If this row is not printed then print.
            # and make the printed value to "yes", so that
            # next time it will not printed.
            if ($arr[$empName]['printed'] == 'no') {
                echo "<td rowspan='".$arr[$empName]['rowspan']."'>".$empName."</td>";
                $arr[$empName]['printed'] = 'yes';
            }
            echo "<td>".$sal[$i]."</td>";
            echo "</tr>";
        }
        echo "</table>";
        ?>
    </body>
</html>

परिणाम:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं MySQL में अनुक्रम कैसे बनाऊं?

  2. कैसे mysql में दो तालिकाओं से डेटा लाने के लिए?

  3. लार्वा में कनेक्टेड डेटाबेस डेटाबेस.एसक्यूएल फ़ाइल का बैकअप/निर्यात कैसे करें?

  4. GROUP_CONCAT ऑर्डर BY

  5. मैं कैसे जांचूं कि MySQL में तालिका फ़ील्ड पर कोई अनुक्रमणिका मौजूद है या नहीं?