2015-12-09 7 views
0

делаю таблицы лиги футбол и Eсть профиль команды (Как: Team.php команда = XXX) На этой странице я хочу показать, Что положение TeamXXX в турнирной таблицеSQL высчитывает номер строки

Page Турнирная таблица

<?php 
    $number = 0; 
    $sql = "SELECT * FROM `leaguetable` WHERE `league` = 'leaguename' ORDER BY pts DESC"; 
    $query = mysql_query($sql); 
    while($rs=mysql_fetch_assoc($query)){ 
     $number++; 
    ?> 
<table> 
<thead> 
<tr> 
<th>Position</th> 
<th>Team</th> 
<th>Points</th> 
</tr> 
</thead> 
<tbody> 
<td><?php echo $number; ?></td> 
<td><?php echo $rs['team']; ?></td> 
<td><?php echo $rs['pts']; ?></td> 
</tbody> 
</table> 
<?php } ?> 

Данные в таблице leaguetable

id  team   pts 

в team.php я хочу, чтобы показать положение TeamXXX

<?php 
    $getTeam = mysql_fetch_assoc(mysql_query("SELECT * FROM `leaguetable` WHERE `team`='"$_GET['team']"'"); 
?> 
<table> 
<thead> 
<tr> 
<th>Position</th> 
<th>Team</th> 
<th>Points</th> 
</tr> 
</thead> 
<tbody> 
<td>#########</td> 
<td><? echo $getTeam['team']; ?></td> 
<td><? echo $getTeam['pts']; ?></td> 
</tbody> 
</table> 

Как я могу узнать, какое положение командыXXX в leaguetable? Любая помощь будет принята с благодарностью. Большое спасибо

+0

может сделать это в MySQL с переменными – amdixon

+0

какой функцией? – Karnivals

+0

Поскольку команды ЗАКАЗЫВАЮТСЯ по счету ('pts DESC'), не' $ number' дает вам позицию? – alexis

ответ

0

запрос

select id, team, pts, rnk 
from 
(
select leag.id, leag.team, leag.pts, 
@rnk := if(leag.pts = @lag, @rnk, 
      if(@lag := leag.pts, @rnk + 1, @rnk + 1)) as rnk 
from leaguetable leag 
cross join (select @rnk := 0, @lag := null) params 
where league = 'FA Cup' 
order by leag.pts desc 
) rankings 
where team = 'Chelsea' 
; 

example.php

<?php 

/** 
* Mysqli initial code 
* 
* User permissions of database 
* Create, Alter and Index table, Create view, and Select, Insert, Update, Delete table data 
* 
* @package   PhpFiddle 
* @link   http://phpfiddle.org 
* @since   2012 
*/ 

require_once "dBug!.php"; 

require "util/public_db_info.php"; 

$short_connect = new mysqli($host_name, $user_name, $pass_word, $database_name, $port); 

if (mysqli_connect_errno()) 
{ 
    die("Failed to connect to MySQL: " . mysqli_connect_error()); 
} 

/* 
$sql = "create table leaguetable" 
    . "(" 
    . " id integer primary key not null," 
    . " team varchar(33) not null," 
    . " pts integer not null default 0" 
    . ");"; 

$result = $short_connect->query($sql); 

if(!$result) 
{ 
    die("Create table failed : " . mysqli_error($short_connect)); 
} 

$sql = "insert into leaguetable" 
    . "(id, team, pts)" 
    . "values" 
    . "(1, 'Liverpool', 22)," 
    . "(2, 'Arsenal', 29)," 
    . "(3, 'Chelsea', 23)," 
    . "(4, 'Tottenham', 23)"; 

$result = $short_connect->query($sql); 

if(!$result) 
{ 
    die("insert failed : " . mysqli_error($short_connect)); 
} 
*/ 

//get all tables in the database 
//$sql = "SHOW TABLES"; 

//get column information from a table in the database 
//$sql="SELECT COLUMN_KEY, COLUMN_NAME, COLUMN_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = 'books'"; 

//SQL statement for a table in the database 
$sql = "select id, team, pts, rnk " 
    . "from" 
    . "(" 
    . "select leag.id, leag.team, leag.pts," 
    . "@rnk := if(leag.pts = @lag, @rnk," 
    . "   if(@lag := leag.pts, @rnk + 1, @rnk + 1)) as rnk " 
    . "from leaguetable leag " 
    . "cross join (select @rnk := 0, @lag := null) params " 
    . " where league = 'FA Cup' " 
    . "order by leag.pts desc;" 
    . ") rankings " 
    . where team = 'Chelsea';"; 

//result is boolean for query other than SELECT, SHOW, DESCRIBE and EXPLAIN 
$result = $short_connect->query($sql); 

if (($result) && ($result->num_rows > 0)) 
{ 
    echo "<table>" . "<thead>" . "<tr>" . "<th>Position</th>" . "<th>Team</th>" . "<th>Points</th>" . "</tr>" . "</thead>" . "<tbody>"; 
    //convert query result into an associative array 
     echo "<tr><td>" . $row['rnk'] . "</td><td>" . $row['team'] . "</td><td>" . $row['pts'] . "</td></tr>"; 
    echo "</tbody></table>"; 
} 
else 
{ 
    die("select failed : " . mysqli_error($short_connect)); 
} 

$short_connect->close(); 


?> 

выход

<table> 
 
    <thead> 
 
    <tr> 
 
     <th>Position</th> 
 
     <th>Team</th> 
 
     <th>Points</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td>2</td> 
 
     <td>Chelsea</td> 
 
     <td>23</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

sqlfiddle

+0

Я понял, спасибо – Karnivals

0

Если вы не возражаете, используя два запроса (я бы не против), это довольно легко: Просто посчитайте, сколько команд имеют больше очков, и добавьте (так что, если три команды привязаны во второй позиции, все они получают позицию 2).

$result = mysql_query("SELECT count(*)+1 AS POSTN FROM leaguetable WHERE 
           league = 'leaguename' AND pts > $points"); 
$row = mysql_fetch_assoc($result); 
$position = $row["POSTN"]; 

Делать это в одном запросе немного хаотичное, так как вам нужно вставить этот запрос в оригинале один:

"SELECT *, (SELECT count(*)+1 FROM leaguetable table2 
       WHERE league = 'leaguename' AND table2.pts > leaguetable.pts) AS POSTN 
    FROM leaguetable WHERE team = '$currentteam'" 

Но почему вы с помощью mysql_* API для нового кода? Разве вы не заметили все документы dire warnings in pink boxes в документации? Сделайте себе одолжение и переключитесь на mysqli сегодня, начиная с этой программы.

Также: Никогда просто введите $_GET[param] в строку запроса! Вы даете себе инъекцию SQL-инъекций, ожидающую появления ... и хрупкий, подверженный ошибкам код до тех пор.

0

Надеется, что это поможет

$number = 0; 
    $points=0; 
     $sql = "SELECT * FROM `leaguetable` WHERE `league` = 'leaguename' ORDER BY pts DESC"; 
     $query = mysql_query($sql); 
     while($rs=mysql_fetch_assoc($query)){ 
     if($points!=$rs['pts']) 
      $number++; 

    if($rs['team']==$_GET['team']){ 
     if($points==$rs['pts']) 
      $position=$number-1; 
     else 
      $position=$number; 
    } 
    $poins=$rs['pts']; 
    }