0

私はmysqlテーブルを持っています-mytable、このように:

name | sales
Mark | 4
Steve | 2
Rick | 5
David | 1

次のように行われた販売数に基づいて結果を取得する場合:

$this->db->select('name,sales');
$this->db->where('sales >=', '2');
$this->db->order_by("sales", "desc"); 
$query = $this->db->get('mytable');

ランク付きのテーブルに入れると、次のようになります。

Rank | Name | Sales
1 | Rick | 5
2 | Mark | 4
3 | Steve | 2

しかし、私はそれをテーブルに入れたくありません。代わりに、クエリ基準に基づいて人のランクを知りたいです。たとえば、Markという名前を指定すると、彼の行番号(ランク)を直接「2」として取得する必要があります。codeigniterアクティブレコードを使用してこれを達成するための私のmysqlクエリは何でしょうか?

4

2 に答える 2

2

あなたが達成しようとしていることは、そのように解決することはできません。これは、MySQLが何かを操作する前に、ランク/位置を何と見なすかを知っていることを意味します。

これを行うための唯一の管理可能な方法は、結果を繰り返し処理し、不要なものだけを印刷することです。

$name = "Mark";
$rank = 0;
$this->db->select('name,sales');
$this->db->where('sales >=', '2');
$this->db->order_by("sales", "desc"); 
$query = $this->db->get('mytable');

foreach($query->result() as $row)
{
    $rank++;
    if( $row->name == $name )
    {
        echo $row->name . ' has rank ' . $rank;
        break; // No more iterating
    } 
}

文字列の代わりに行を識別するためにテーブルに自動インクリメントIDを追加するなど、いくつかのテーブル変更を行うことを検討する必要があります。

于 2013-03-26T07:09:35.310 に答える
0
$query='SELECT name,sales
FROM mytable
WHERE sales>=?
ORDER BY sales desc';
$params=array();
$params[]=2;
$result=$this->db->query($query,$params);
$result=$result->result_array();

print_r($result[2]);

おそらく、制限を使用して、必要な結果のみを取得する必要があります。

$query='SELECT name,sales
FROM mytable
WHERE sales>=?
ORDER BY sales desc
LIMIT 1,1'; //offset 1, show 1 result
$params=array();
$params[]=2;
$result=$this->db->query($query,$params);
$result=$result->row_array();

print_r($result);
于 2013-03-26T02:04:57.313 に答える