2009-04-20 5 views
0

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

Мне интересно, возможно ли, если бы приведенный ниже запрос был подготовлен, чтобы связать связанный параметр с результатом цикла, содержащего 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 категории подделкой, 3 должны быть возвращены.

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

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

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

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

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

ответ

0

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

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

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

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']"; 
    } 
} 
+0

Мне нужно, чтобы иметь возможность печатать как поддельных деталей: $ numfakeitems проданными : $ numsolditems oktiems: $ numokitems и т. д., поэтому я подумал, что имеет смысл использовать массив. На данный момент я не думаю, что могу сделать это только с одной переменной, если я не понял? – 2009-04-20 14:20:06

+1

Пожалуйста, разместите некоторые данные примера и результаты, которые вы хотите получить. – Quassnoi

+0

добавив в вопрос – 2009-04-20 14:26:59

Смежные вопросы