динамически именовать переменную? - PullRequest
0 голосов
/ 20 апреля 2009

У меня есть таблица с различными аукционами, где каждая запись имеет имя пользователя и категорию. Скорее всего, будет несколько записей с одинаковыми именем пользователя и категорией. Существует четыре различных типа категорий.

Мне интересно, возможно ли, учитывая подготовленный ниже запрос, иметь второй связанный параметр, являющийся результатом цикла по массиву, содержащему 4 категории, и могу ли я динамически присвоить результат массиву?

$countAuctionsQuery = "select COUNT(USERNAME, SUBCAT) from AUCTIONS where username = ? AND SUBCAT = ?";

    if ($getRecords = $con->prepare($countAuctionsQuery)) 
        {
        $getRecords->bind_param("ss", $username, $subcat);
        $getRecords->execute();        
        $getRecords->bind_result($numRecords);
         }

редактирование:

Пример данных

Auctions


username    itemnumber  cost    category
------------------------------------------------
fredx       222     $33 fake
fredx       123     $43 fake
timo        765     $54 fake
fredx       987     $99 sold
bobk        233     $77 fake
wenx        11      $12 ok
fredx       23      $31 ok
fredx       723     $73 fake
wenx        44      $88 ok

Таким образом, для имени пользователя fredx и категории fake должно быть возвращено 3.

Для имени пользователя fredx и проданной категории следует вернуть 1

Для имени пользователя timo и категории fake, должно быть возвращено 1

Для имени пользователя wenx и категории ok должно быть возвращено 2.

Я хочу иметь возможность печатать так:

Fake items: $numfake items or category['fake']
OK items: $numok items or category['ok']
Sold items: $numsold items or category['sold']

Ответы [ 2 ]

0 голосов
/ 21 апреля 2009

Попробуйте это:

function getCategoryCount($user, $conn) {
    $result = array();
    $query = "SELECT category, COUNT(id) AS count FROM Auctions
              WHERE username=? GROUP BY category";
    $stmt = $conn->prepare($query);
    $stmt->bind_param('s',$user);
    $stmt->execute();
    $stmt->bind_result($cat, $count);
    while ($stmt->fetch()) {
        $result[$cat] = $count;
    }
    return $result;
}

Вы можете использовать функцию следующим образом:

$count = getCategoryCount('fred', $con);
print $count['fake']; // prints '3'

И наоборот, вы также можете сделать это:

$query = "SELECT category, COUNT(id) AS count FROM Auctions
          WHERE username=? GROUP BY category";
$stmt = $con->prepare($query);
$stmt->bind_param('s',$user);
$user = 'fred';
$stmt->execute();
$stmt->bind_result($cat, $count);
while ($stmt->fetch()) {
    ${'num'.$cat} = $count;
}

print $numfake;
print $numok;
print $numsold;
0 голосов
/ 20 апреля 2009

Используйте это:

SELECT  subcat, COUNT(*)
FROM    AUCTIONS
WHERE   username = ?
GROUP BY
        subcat

и получить результаты в цикле:

$countAuctionsQuery = $query;

if ($getRecords = $con->prepare($countAuctionsQuery)) {
    $getRecords->bind_param("s", $username);
    $getRecords->execute();        
    $getRecords->bind_result($subcat, $numRecords);
    while ($getRecords->fetch()) {
        print "$subcat items: $numRecords items of category['$subcat']";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...