dinamik bir değişken adlandırma?

2 Cevap php

Ben her kayıt bir kullanıcı adı ve bir kategori hem de çeşitli ihaleleri, bir tablo var. Büyük olasılıkla daha fazla, aynı kullanıcı adı ve kategori ile birden fazla kayıt olacak. Kategoriler dört farklı türleri vardır.

Mümkün olurdu eğer ben ikinci ilişkili parametre 4 kategorilerini içeren bir dizi döngü sonucu olması için aşağıda hazırlanan sorgu, verilen, merak ediyorum, ve ben dinamik bir diziye sonucu atamak olurdu?

$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);
         }

edit:

Verilerin bir örneği

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

Yani, adı Fredx ve kategori sahte için, 3 iade edilmelidir.

Kullanıcı adınızı Fredx ve kategori satılır, 1 iade edilmelidir

Kullanıcı adınızı Timo ve kategori sahte için, 1 iade edilmelidir

Kullanıcı adınızı WenX ve ok kategori için, 2 iade edilmelidir.

Ben şöyle yazdırmak mümkün olmak istiyorum:

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

2 Cevap

Bu deneyin:

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;
}

Böyle işlevini kullanabilirsiniz:

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

Tersine, aynı zamanda bunu yapabilirsiniz:

$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;

Bunu kullanın:

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

ve bir döngü içinde sonuçlar getirebilir:

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