如何修复此查询以仅返回其子数组中具有特定值的项目?

时间:2013-01-05 00:19:42

标签: php mysql arrays

我正在尝试修改投票脚本(Thumbsup)我需要此查询只返回其'cat'=>的数组项子阵列中的“1”(正确的术语?)

<?php $items = ThumbsUp::items()->get() ?>

以下是我的数据库中实时生成的数组的示例

array (
  0 => 
  array (
    'id' => 1,
    'name' => 'a',
    'cat' => '1',
  ),
  1 => 
  array (
    'id' => 2,
    'name' => 'b',
    'cat' => '2',
  ),
  2 => 
  array (
    'id' => 3,
    'name' => 'c',
    'cat' => '2',
  ),


)

只需修改查询就可以了吗?

编辑:继承人函数get()

public function get()
{
    // Start building the query
    $sql  = 'SELECT id, name, url, cat, closed, date, votes_up, votes_down, ';
    $sql .= 'votes_up - votes_down AS votes_balance, ';
    $sql .= 'votes_up + votes_down AS votes_total, ';
    $sql .= 'votes_up / (votes_up + votes_down) * 100 AS votes_pct_up, ';
    $sql .= 'votes_down / (votes_up + votes_down) * 100 AS votes_pct_down ';
    $sql .= 'FROM '.ThumbsUp::config('database_table_prefix').'items ';

    // Select only either open or closed items
    if ($this->closed !== NULL)
    {
        $where[] = 'closed = '.(int) $this->closed;
    }

    // Select only either open or closed items
    if ($this->name !== NULL)
    {
        // Note: substr() is used to chop off the wrapping quotes
        $where[] = 'name LIKE "%'.substr(ThumbsUp::db()->quote($this->name), 1, -1).'%"';
    }

    // Append all query conditions if any
    if ( ! empty($where))
    {
        $sql .= ' WHERE '.implode(' AND ', $where);
    }

    // We need to order the results
    if ($this->orderby)
    {
        $sql .= ' ORDER BY '.$this->orderby;
    }
    else
    {
        // Default order
        $sql .= ' ORDER BY name ';
    }
    // A limit has been set
    if ($this->limit)
    {
        $sql .= ' LIMIT '.(int) $this->limit;
    }

    // Wrap this in an try/catch block just in case something goes wrong
    try
    {
        // Execute the query
        $sth = ThumbsUp::db()->prepare($sql);
        $sth->execute(array($this->name));
    }
    catch (PDOException $e)
    {
        // Rethrow the exception in debug mode
        if (ThumbsUp::config('debug'))
            throw $e;

        // Otherwise, fail silently and just return an empty item array
        return array();
    }

    // Initialize the items array that will be returned
    $items = array();

    // Fetch all results
    while ($row = $sth->fetch(PDO::FETCH_OBJ))
    {
        // Return an item_id => item_name array
        $items[] = array(
            'id' => (int) $row->id,
            'name' => $row->name,
            'url' => $row->url,
            'cat' => $row->cat,
            'closed' => (bool) $row->closed,
            'date' => (int) $row->date,
            'votes_up' => (int) $row->votes_up,
            'votes_down' => (int) $row->votes_down,
            'votes_pct_up' => (float) $row->votes_pct_up,
            'votes_pct_down' => (float) $row->votes_pct_down,
            'votes_balance' => (int) $row->votes_balance,
            'votes_total' => (int) $row->votes_total,
        );
    }

    return $items;
}

感谢。

1 个答案:

答案 0 :(得分:4)

您可以轻松修改“get()”以添加所需的功能:

public function get($cat = null)
{
    $where = array();
    if ($cat !== null) {
        $where[] = 'cat = '. (int) $cat;
    }

    // ... original code ...
}

用法:

$items = ThumbsUp::items()->get(1);