skip to Main Content

I’ve made a query to count and rank every row for a table, but I can’t join the query into one table.

I’ve been trying to make a leaderboard and I’ve managed to make a query that ranks every row based on the amount of points they have (ie. 1st, 2nd, 3rd, etc). Due to my SQL version, I’ve had to use a workaround to ROW_NUMBER() and I’m struggling to include that query in this INNER JOIN query I’ve already got.

INNER JOIN query:

$query = mysqli_query($conn, "SELECT students.username, 
            CONCAT(spoints.points, 'pts') AS pointspts, 
            CONCAT(students.firstname, ' ', students.lastname) AS name, 
            CASE WHEN sex = 'M' THEN 'Male' ELSE 'Female' END AS sexes, 
            students.house, 
            CONCAT(students.age, 'yrs') AS ageyrs 
        FROM students 
            INNER JOIN spoints ON students.username=spoints.username 
        ORDER BY points DESC");

The COUNT(*) query in which I’m trying to merge into the INNER JOIN query:

$rank = mysqli_query($conn, "SELECT username, 1 + ( SELECT count(*) FROM spoints a WHERE a.points > b.points ) AS rank 
                        FROM spoints b 
                        ORDER BY rank;");

I’m trying to link these up so they’ll form one succinct table, which is where the issue is arising.

I’ve tried a large variation of code joining them, such as:

$query = mysqli_query($conn, "SELECT students.username, 
            CONCAT(spoints.points, 'pts') AS pointspts, 
            CONCAT(students.firstname, ' ', students.lastname) AS name, 
            CASE WHEN sex = 'M' THEN 'Male' ELSE 'Female' END AS sexes, 
            students.house, CONCAT(students.age, 'yrs') AS ageyrs, 
            (SELECT 1 + (SELECT count(*) FROM spoints a WHERE a.points > b.points ) AS rank FROM spoints b) AS rank 
        FROM students 
            INNER JOIN spoints ON students.username=spoints.username 
        ORDER BY points DESC");

But that only seems to return a blank column or a "mysqli_query(): (21000/1242): Subquery returns more than 1 row" error.

I’ve also tried merging the queries with two mysqli_fetch_arrays but then I have this mutually exclusive problem in which only the first column of either the $rank query, or the $query query will print. I.e.

while ($roow = mysqli_fetch_array($rank)){
    while ($row = mysqli_fetch_array($query)){
        printf("
            <tr>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
            </tr>", $roow['rank'], $row['name'], $row['ageyrs'], $row['sexes'], $row['house'], $row['pointspts']
        ); 
    }
}

returns:

Standing Name Age Sex House Points
1st Kogan Spaghetti 17yrs Male Tasman 234pts
1st Ami Beckler 12yrs Female Pacific 24pts
1st Jan Schuette 18yrs Male Coral 0pts

OR

while ($row = mysqli_fetch_array($query)){
       while ($roow = mysqli_fetch_array($rank)){
        printf("
            <tr>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
                <td>%s</td>
            </tr>", $roow['rank'], $row['name'], $row['ageyrs'], $row['sexes'], $row['house'], $row['pointspts']
        ); 
    }
}

returns:

Standing Name Age Sex House Points
1st Kogan Spaghetti 17yrs Male Tasman 234pts
2nd Kogan Spaghetti 17yrs Male Tasman 234pts
3rd Kogan Spaghetti 17yrs Male Tasman 234pts

I want my code to return this:

Standing Name Age Sex House Points
1st Kogan Spaghetti 17yrs Male Tasman 234pts
2nd Ami Beckler 12yrs Female Pacific 24pts
3rd Jan Schuette 18yrs Male Coral 0pts

with the code I’ve already created which is clearly capable of doing so.

How do I merge these queries so they may all print together?

2

Answers


  1. here’s an example of how I believe it’s a better way to get the expected data, I hope it helps.

    Edited in more detail for better understanding.

    select concat( s.firstname , ' ', s.lastname) as name,
        concat(s.age,'yrs') as Age ,
        CASE WHEN s.sex = 'M' THEN 'Male' ELSE 'Female' END AS Sex
        ,s.house  as House
    # use sum(p.points) to count the number of points, 
    # or count(p.points) if there is one # point per line 
    
    ,sum(p.points) as points
    
    # Use the points table as the main one 
    # and include the link with the left join of the students table
    from spoints p
    
    # I see that your secondary key link is by username,
    # in my case I used p.student_id = s.id
    # but in your case use
    # p.username = s.username
    
        left join students s on p.student_id = s.id
    
    # perform the grouping with reference to the username for your case
    # group by p.username
    group by p.student_id
    
    # para obter os melhor colocados  
    # utilize 'order by' para deixalos no top com ordenação 'desc'
    order by points desc
    # if your version has support use limit 3 to get only the first 3
    limit 3
    

    Result

    name Age Sex House points
    Ami Beckler 12yrs Female Pacific 151
    Kogan Spaghetti 17yrs Male Tasman 141
    Jan Schuette 18yrs Male Coral 54

    sample database

    CREATE DATABASE teste;
    use teste
    create table students
    (
        id        int auto_increment
            primary key,
        username  text null,
        firstname text null,
        lastname  text null,
        age       int  null,
        house     text null,
        sex       text null,
        constraint students_id_uindex
            unique (id)
    );
    
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('kogan.spaghetti', 'Kogan', 'Spaghetti', 17, 'Tasman ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('ami.beckler', 'Ami', 'Beckler', 12, 'Pacific ', 'F')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('jan.schuette  ', 'Jan', 'Schuette', 18, 'Coral ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('px.t1', 'px', 't1', 16, 'Pacific ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('px.t2', 'px', 't2', 17, 'Pacific ', 'F')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('px.t3', 'px', 't3', 18, 'Pacific ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('cx.t4', 'cx', 't4', 15, 'Coral ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('cx.t5', 'cx', 't5', 14, 'Coral ', 'D')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('cx.t6', 'cx', 't6', 13, 'Coral ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('tx.t7', 'tx', 't7', 13, 'Tasman ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('tx.t8', 'tx', 't8', 13, 'Tasman ', 'M')
    INSERT INTO teste.students (username, firstname, lastname, age, house, sex) VALUES ('tx.t9', 'tx', 't9', 13, 'Tasman ', 'M')
    
    create table spoints
    (
        id         int auto_increment
            primary key,
        username   text null,
        points     int  null,
        student_id int  null,
        constraint spoints_id_uindex
            unique (id),
        constraint spoints_students_id_fk
            foreign key (student_id) references students (id)
    );
    
    
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 2, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 5, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 2, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 9, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 6, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 6, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 1, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 3, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 8, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 7, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 2, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('jan.schuette  ', 3, 3)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 3, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 12, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 34, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 5, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 3, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 6, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 77, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 8, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 2, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('ami.beckler', 1, 2)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 1, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 1, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 5, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 4, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 1, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 75, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 7, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 1, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 6, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 34, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 1, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('kogan.spaghetti', 5, 1)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('px.t1', 2, 4)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('px.t2', 2, 5)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('px.t3', 2, 6)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('cx.t4', 2, 7)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('cx.t5', 2, 8)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('cx.t6', 2, 9)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('tx.t7', 2, 10)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('tx.t8', 2, 11)
    INSERT INTO teste.spoints (username, points, student_id) VALUES ('tx.t9', 2, 12)
    
    

    php exemple

    $i=0;
    while ($row = mysqli_fetch_assoc($query)) {
    $i++;
    /*
    use filter to add the st, nd, rd complement
    using the variable $i as a line counter knowing that your query is already sorted
    */
    $filter = array('th','st','nd','rd','th','th','th','th','th','th');
    if (($i %100) >= 11 && ($i%100) <= 13)
       $rank = $i. 'th';
    else
        $rank = ($i)? $i. $filter[$i % 10] : $i;
    
    printf("
                <tr>
                    <td>%s</td>
                    <td>%s</td>
                    <td>%s</td>
                    <td>%s</td>
                    <td>%s</td>
                    <td>%s</td>
                </tr>",$rank, $row['name'], $row['Age'], $row['Sex'], $row['House'], $row['points'].'pts'
            ); 
    }
    

    diagram

    Login or Signup to reply.
  2. If you made this a two stage process where the first stage is to generate a view of the data that accounts for the addition of scores then the second stage could use that view to then perform the rank calculation.

    Borrowing slightly the table schema ( lightly modified ) from @Rafa Akito’s answer – viz:

    CREATE TABLE `tbl_students` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `username` TEXT NULL,
        `firstname` TEXT NULL,
        `lastname` TEXT NULL,
        `age` INT(11) NULL DEFAULT NULL,
        `house` TEXT NULL,
        `sex` TEXT NULL,
        PRIMARY KEY (`id`),
        UNIQUE INDEX `students_id_uindex` (`id`)
    )
    ENGINE=InnoDB;
    
    CREATE TABLE `tbl_scores` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `username` TEXT NULL,
        `points` INT(11) NULL DEFAULT NULL,
        `student_id` INT(11) NULL DEFAULT NULL,
        PRIMARY KEY (`id`),
        UNIQUE INDEX `scores_id_uindex` (`id`),
        INDEX `scores_students_id_fk` (`student_id`),
        CONSTRAINT `scores_students_id_fk` FOREIGN KEY (`student_id`) REFERENCES `tbl_students` (`id`)
    )
    ENGINE=InnoDB;
    
    INSERT INTO `tbl_scores` (`id`, `username`, `points`, `student_id`) VALUES
        (1, 'jan.schuette', 2, 3),
        (2, 'jan.schuette', 5, 3),
        (3, 'jan.schuette', 2, 3),
        (4, 'jan.schuette', 9, 3),
        (5, 'jan.schuette', 6, 3),
        (6, 'jan.schuette', 6, 3),
        (7, 'jan.schuette', 1, 3),
        (8, 'jan.schuette', 3, 3),
        (9, 'jan.schuette', 8, 3),
        (10, 'jan.schuette', 7, 3),
        (11, 'jan.schuette', 2, 3),
        (12, 'jan.schuette', 3, 3),
        (13, 'ami.beckler', 3, 2),
        (14, 'ami.beckler', 12, 2),
        (15, 'ami.beckler', 34, 2),
        (16, 'ami.beckler', 5, 2),
        (17, 'ami.beckler', 3, 2),
        (18, 'ami.beckler', 6, 2),
        (19, 'ami.beckler', 77, 2),
        (20, 'ami.beckler', 8, 2),
        (21, 'ami.beckler', 2, 2),
        (22, 'ami.beckler', 1, 2),
        (23, 'kogan.spaghetti', 1, 1),
        (24, 'kogan.spaghetti', 1, 1),
        (25, 'kogan.spaghetti', 5, 1),
        (26, 'kogan.spaghetti', 4, 1),
        (27, 'kogan.spaghetti', 1, 1),
        (28, 'kogan.spaghetti', 75, 1),
        (29, 'kogan.spaghetti', 7, 1),
        (30, 'kogan.spaghetti', 1, 1),
        (31, 'kogan.spaghetti', 6, 1),
        (32, 'kogan.spaghetti', 34, 1),
        (33, 'kogan.spaghetti', 1, 1),
        (34, 'kogan.spaghetti', 5, 1),
        (35, 'px.t1', 2, 4),
        (36, 'px.t2', 2, 5),
        (37, 'px.t3', 2, 6),
        (38, 'cx.t4', 2, 7),
        (39, 'cx.t5', 2, 8),
        (40, 'cx.t6', 2, 9),
        (41, 'tx.t7', 2, 10),
        (42, 'tx.t8', 2, 11),
        (43, 'tx.t9', 2, 12);
    
    INSERT INTO `tbl_students` (`id`, `username`, `firstname`, `lastname`, `age`, `house`, `sex`) VALUES
        (1, 'kogan.spaghetti', 'Kogan', 'Spaghetti', 17, 'Tasman ', 'M'),
        (2, 'ami.beckler', 'Ami', 'Beckler', 12, 'Pacific ', 'F'),
        (3, 'jan.schuette', 'Jan', 'Schuette', 18, 'Coral ', 'M'),
        (4, 'px.t1', 'px', 't1', 16, 'Pacific ', 'M'),
        (5, 'px.t2', 'px', 't2', 17, 'Pacific ', 'F'),
        (6, 'px.t3', 'px', 't3', 18, 'Pacific ', 'M'),
        (7, 'cx.t4', 'cx', 't4', 15, 'Coral ', 'M'),
        (8, 'cx.t5', 'cx', 't5', 14, 'Coral ', 'D'),
        (9, 'cx.t6', 'cx', 't6', 13, 'Coral ', 'M'),
        (10, 'tx.t7', 'tx', 't7', 13, 'Tasman ', 'M'),
        (11, 'tx.t8', 'tx', 't8', 13, 'Tasman ', 'M'),
        (12, 'tx.t9', 'tx', 't9', 13, 'Tasman ', 'M');
    

    Then creating the view:

    create view vw_stud_rank as
    select 
        st.`username`, 
        sum( sc.`points` ) as `score`
    from tbl_students st
        join tbl_scores sc on sc.`student_id`=st.`id`
    group by st.`id`;
    

    And finally the ranking calculation query:

    select 
        s.*,
        case 
            when @pr = `score` then @cr 
            when @pr := `score` then @cr := @cr + 1
        end as `rank`
     from `vw_stud_rank` s,
     ( select @cr:=0,@pr:=null ) x
    order by `score` desc;
    

    The above query then yields:

    +-----------------+-------+------+
    | username        | score | rank |
    +-----------------+-------+------+
    | ami.beckler     |   151 |    1 |
    | kogan.spaghetti |   141 |    2 |
    | jan.schuette    |    54 |    3 |
    | px.t1           |     2 |    4 |
    | px.t2           |     2 |    4 |
    | px.t3           |     2 |    4 |
    | cx.t4           |     2 |    4 |
    | cx.t5           |     2 |    4 |
    | cx.t6           |     2 |    4 |
    | tx.t7           |     2 |    4 |
    | tx.t8           |     2 |    4 |
    | tx.t9           |     2 |    4 |
    +-----------------+-------+------+
    12 rows in set (0.02 sec)
    

    If you combine that with your own function ( found here ) – viz:

    DELIMITER $$
    CREATE FUNCTION ordinal(number BIGINT)
    RETURNS VARCHAR(64)
    DETERMINISTIC
    BEGIN
      DECLARE ord VARCHAR(64);
      SET ord = (SELECT CONCAT(number, CASE
        WHEN number%100 BETWEEN 11 AND 13 THEN "th"
        WHEN number%10 = 1 THEN "st"
        WHEN number%10 = 2 THEN "nd"
        WHEN number%10 = 3 THEN "rd"
        ELSE "th"
      END));
      RETURN ord;
    END$$
    DELIMITER ;
    

    You could then modify the above query to become:

    select 
        s.*,
        case 
            when @pr = `score` then ordinal(@cr) 
            when @pr := `score` then @cr := ordinal(@cr + 1)
        end as `rank`
     from `vw_stud_rank` s,
     ( select @cr:=0, @pr:=null ) x
    order by `score` desc;
    

    Which itself yields:

    +-----------------+-------+------+
    | username        | score | rank |
    +-----------------+-------+------+
    | ami.beckler     |   151 | 1st  |
    | kogan.spaghetti |   141 | 2nd  |
    | jan.schuette    |    54 | 3rd  |
    | px.t1           |     2 | 4th  |
    | px.t2           |     2 | 4th  |
    | px.t3           |     2 | 4th  |
    | cx.t4           |     2 | 4th  |
    | cx.t5           |     2 | 4th  |
    | cx.t6           |     2 | 4th  |
    | tx.t7           |     2 | 4th  |
    | tx.t8           |     2 | 4th  |
    | tx.t9           |     2 | 4th  |
    +-----------------+-------+------+
    12 rows in set (0.00 sec)
    

    The view is simple to modify to include the yrs or Male/Female of course and it should be noted that later versions of mySQL – 8+ – have the rank() function built-in but the above was done within mySQL 5.5.8

    A modified view:

    create view vw_stud_rank as
    select 
        st.`username`,
        concat(st.age,'yrs') as `age`,
        st.house,
        case
            when st.sex='m' then 'Male'
            when st.sex='f' then 'Female'
            else 'Non-Binary'
        end as `sex`,
        sum( sc.`points` ) as `score`
    from tbl_students st
        join tbl_scores sc on sc.`student_id`=st.`id`
    group by st.`id`;
    

    That then yields the result more akin to the desired result:

    +-----------------+-------+----------+------------+-------+------+
    | username        | age   | house    | sex        | score | rank |
    +-----------------+-------+----------+------------+-------+------+
    | ami.beckler     | 12yrs | Pacific  | Female     |   151 | 1st  |
    | kogan.spaghetti | 17yrs | Tasman   | Male       |   141 | 2nd  |
    | jan.schuette    | 18yrs | Coral    | Male       |    54 | 3rd  |
    | px.t1           | 16yrs | Pacific  | Male       |     2 | 4th  |
    | px.t2           | 17yrs | Pacific  | Female     |     2 | 4th  |
    | px.t3           | 18yrs | Pacific  | Male       |     2 | 4th  |
    | cx.t4           | 15yrs | Coral    | Male       |     2 | 4th  |
    | cx.t5           | 14yrs | Coral    | Non-Binary |     2 | 4th  |
    | cx.t6           | 13yrs | Coral    | Male       |     2 | 4th  |
    | tx.t7           | 13yrs | Tasman   | Male       |     2 | 4th  |
    | tx.t8           | 13yrs | Tasman   | Male       |     2 | 4th  |
    | tx.t9           | 13yrs | Tasman   | Male       |     2 | 4th  |
    +-----------------+-------+----------+------------+-------+------+
    12 rows in set (0.05 sec)
    

    Which, when plugged into PHP, could yield final HTML as follows:

    <?php
        
        chdir('../../dbo');
        require 'db-conn-details.php';
        require 'mysqli-conn.php';
        
        
        
        $sql="select
                case 
                    when @pr = `score` then ordinal( @cr )
                    when @pr := `score` then @cr := ordinal( @cr + 1 )
                end as `standing`,
                s.username,
                s.age,
                s.house,
                s.sex,
                concat( s.score, 'pts' ) as `points`
    
            from `vw_stud_rank` s,
             ( select @cr:=0,@pr:=null ) x
            order by `score` desc;";
    ?>
    <!DOCTYPE html>
    <html lang='en'>
        <head>
            <meta charset='utf-8' />
            <title></title>
            <style>
                table{
                    border:1px solid grey;
                    border-collapse:collapse;
                    font-family:monospace;
                    width:80%;
                    float:none;
                    margin:auto
                }
                tr th{
                    background:grey;
                    color:white;
                }
                td{
                    border:1px dotted grey
                }
                th,td{
                    padding:0.5rem;
                    text-align:left;
                }
            </style>
        </head>
        <body>
            <table>
                <colgroup>
                    <col width='5%' />
                    <col width='55%' />
                    <col width='10%' />
                    <col width='10%' />
                    <col width='10%' />
                    <col width='10%' />
                </colgroup>
                <tr>
                    <th>Standing</th>
                    <th>Username</th>
                    <th>Age</th>
                    <th>House</th>
                    <th>Gender</th>
                    <th>Points</th>
                </tr>
            <?php
                $res=$db->query( $sql );
                while( $rs=$res->fetch_object() ){
                    printf('
                        <tr>
                            <td>%s</td>
                            <td>%s</td>
                            <td>%s</td>
                            <td>%s</td>
                            <td>%s</td>
                            <td>%s</td>
                        </tr>',
                        $rs->standing,
                        $rs->username,
                        $rs->age,
                        $rs->house,
                        $rs->sex,
                        $rs->points
                    );
                }
            ?>
            </table>
        </body>
    </html>
    

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search