2011-11-15 32 views
0

记录显示号码,我有以下栏目..MySQL的:基于两列用PHP

Name, pageID, promoID 

Bob, 123, promo1 
Steve, 123, promo1 
Nancy, 123, promo2 
Lyn, 123, promo2 
Amy, 123, promo2 
Jeff, 123, promo2 
Joe, 456, promo3 
Bill, 456, promo3 
Joe, 456, promo3 

我想创建的仅拥有123的pageID记录的报告,然后将它们分组由promoID。所以,我的表输出应该是这样..

Records for pageID 123.. 
promo1 = 2 entries 
promo2 = 4 entries 

什么查询将做到这一点?

这是我目前已经吐出到一个HTML表..

$querysubmissions = mysql_query("SELECT promoID FROM submissions WHERE fbPageID = '123'"); 
$numbersubmissions = mysql_num_rows($querysubmissions); 


$query = mysql_query("SELECT * FROM submissions WHERE fbPageID = '$page_id' GROUP BY promoTitle"); 

while($data = mysql_fetch_assoc($query)){ 
    $title = $data['promoTitle']; 
    echo '<tr>'; 
    echo '<td>'.$title.'</td>'; 
    echo '<td>'.$numbersubmissions.'</td>'; 
    echo "<td><a href='submission-csv.php?promoid=".$data['promoID']."'>Export</a></td>"; 
    echo '</tr>'; 
    } 

    mysql_close(); 

但这只是返回提交了123的pageID和所有promoIDs的总数。我将如何在PHP中回应这个问题?

+0

嗯,是的,你还没有告诉查询到组结果。 – OTTA

回答

5

在您选择尝试GROUP BY和使用count(*)

SELECT promoID, count(*) as `count` 
FROM submissions 
WHERE fbPageID = '123' 
GROUP BY promoID; 
0
$querysubmissions = mysql_query("SELECT promoID,COUNT(promoID) as count FROM submissions WHERE fbPageID = '123' GROUP BY promoID"); 
$numbersubmissions = mysql_num_rows($querysubmissions); 
0

你可以做到这一切在SQL查询本身。

Select PromoID, Count(PromoID) as pCount From submissions where fbPageID = '123' Group By PromoID 

您也可以为多页

Select concat('Page ',fbPageID,', ',PromoID,' = ',Count(PromoID)) as result From submissions Group By fbPageID, PromoID 

这具有不需要为每个页面做一个选择额外的收获做到这一点。因此您的结果会是什么样子

Page 123, Promo1 = 2 
Page 123, Promo2 = 4 
Page 456, Promo3 = 3 
0

THS查询将在“促销1 = 2项”格式显示

SELECT 'Records for pageID 123' ResultDisplay 
UNION 
SELECT 
    CONCAT(promoID,' = ',cnt,' entr',IF(cnt=1,'y','ies')) 
FROM 
    (SELECT promoID,count(1) cnt 
    FROM submissions 
    WHERE pageID = '123' 
    GROUP BY promoID) A; 

这里被装载到提交表格示例数据:

mysql> use junk 
Database changed 
mysql> drop table if exists submissions; 
Query OK, 0 rows affected, 1 warning (0.02 sec) 
mysql> create table submissions 
    -> (name varchar(10),pageID int,promoID varchar(10)) ENGINE=MyISAM; 
Query OK, 0 rows affected (0.08 sec) 

mysql> insert into submissions values 
    -> ('Bob' , 123 , 'promo1'), 
    -> ('Steve', 123 , 'promo1'), 
    -> ('Nancy', 123 , 'promo2'), 
    -> ('Lyn' , 123 , 'promo2'), 
    -> ('Amy' , 123 , 'promo2'), 
    -> ('Jeff' , 123 , 'promo2'), 
    -> ('Joe' , 456 , 'promo3'), 
    -> ('Bill' , 456 , 'promo3'), 
    -> ('Joe' , 456 , 'promo3'); 
select * from submissions;Query OK, 9 rows affected (0.00 sec) 
Records: 9 Duplicates: 0 Warnings: 0 

mysql> select * from submissions; 
+-------+--------+---------+ 
| name | pageID | promoID | 
+-------+--------+---------+ 
| Bob | 123 | promo1 | 
| Steve | 123 | promo1 | 
| Nancy | 123 | promo2 | 
| Lyn | 123 | promo2 | 
| Amy | 123 | promo2 | 
| Jeff | 123 | promo2 | 
| Joe | 456 | promo3 | 
| Bill | 456 | promo3 | 
| Joe | 456 | promo3 | 
+-------+--------+---------+ 
9 rows in set (0.00 sec) 

这里是执行查询:

mysql> SELECT 'Records for pageID 123' ResultDisplay 
    -> UNION 
    -> SELECT 
    ->  CONCAT(promoID,' = ',cnt,' entr',IF(cnt=1,'y','ies')) 
    -> FROM 
    ->  (SELECT promoID,count(1) cnt 
    ->  FROM submissions 
    ->  WHERE PageID = '123' 
    ->  GROUP BY promoID) A 
    -> ; 
+------------------------+ 
| ResultDisplay   | 
+------------------------+ 
| Records for pageID 123 | 
| promo1 = 2 entries  | 
| promo2 = 4 entries  | 
+------------------------+ 
3 rows in set (0.03 sec) 

试试看!

这是在PHP

$givenpageID = 123; 
$sql = "SELECT 'Records for pageID " . $givenpageID . "' ResultDisplay UNION SELECT CONCAT(promoID,' = ',cnt,' entr',IF(cnt=1,'y','ies')) FROM (SELECT promoID,count(1) cnt FROM submissions WHERE PageID = '" . $givenpageID . "' GROUP BY promoID) A"; 
$result = mysql_query($sql); 
if (!$result) { 
    echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
    exit; 
} 
while ($row = mysql_fetch_assoc($result)) { 
    echo $row["ResultDisplay"]; 
} 
mysql_free_result($result); 
+0

这看起来不错。你知道我会如何在PHP中回显每一行吗? – Dustin

+0

我添加了PHP来获取并显示 – RolandoMySQLDBA