Как вывести все строки таблицы MySQL и включить столбец для подсчета дубликатов? - PullRequest
1 голос
/ 24 февраля 2012

Я нашел вопросы, связанные с удалением дубликатов и подсчетом дубликатов, но мне не удалось добавить счетчик дубликатов в строки MySQL, поэтому я задаю этот вопрос. Вот что у меня есть:

$query = "SELECT * FROM Losers ORDER BY Date DESC"; 
$result = mysql_query($query) or die(mysql_error());
echo '<table>';
while($row = mysql_fetch_array($result)){
    echo '<tr><td>' . $row['Name']. "</td><td>". date("l, M j, Y",strtotime($row['Date'])) . '</td></tr>';
}
echo '</table>';
mysql_close($con);

Теперь я хочу включить количество дубликатов в Имя для каждой строки. Итак, это будет выглядеть примерно так:

Ben 2
Laura 3
Amy 1
Laura 3
Ben 2
Laura 3

Я нашел этот запрос, чтобы сгруппировать дубликаты в Имя и сосчитать их:

$newQuery = "SELECT Name, Date, COUNT(Name) FROM Losers GROUP BY Name"; 

Но тогда он выдаст:

Ben 2
Laura 3
Amy 1

Как объединить оба запроса?

Ответы [ 5 ]

4 голосов
/ 24 февраля 2012
SELECT Losers.Name, Losers.Date, L.Count
FROM Losers
JOIN (
    SELECT Name, COUNT( Name ) AS Count
    FROM Losers
    GROUP BY Name
) AS L ON Losers.Name = L.Name
4 голосов
/ 24 февраля 2012

Афаик, вы не можете сделать это без подзапроса:

SELECT Losers.*, (SELECT COUNT(*) FROM Losers AS Sub WHERE Sub.Name = Losers.Name) AS `count` FROM Losers ORDER BY Date DESC

Но лично я бы предпочел сделать это с двумя отдельными запросами.

Редактировать: см. Два ответа ниже, они намного лучше.

3 голосов
/ 24 февраля 2012

Самый простой способ - это взять запрос с предложением GROUP BY и использовать его как подзапрос, присоединяемый к исходной таблице.

IE

SELECT L.*, Loser_Count.count
FROM Losers L
JOIN (SELECT loser_id, COUNT(Name) count FROM Losers GROUP BY Name) Loser_Count ON
  L.loser_id = Loser_Count.loser_id 
ORDER BY L.date DESC

Это должно работать, но я не удивлюсь, если гений SQL вернется с более эффективным способом.Надеюсь, это поможет!

1 голос
/ 24 февраля 2012

Я бы сделал это в двух отдельных запросах:

SELECT Name, COUNT(*) FROM Losers GROUP BY Name
/* Parse this to have a php array $l_count in form ("Ben" => 2, "Laura" => 3) */
SELECT Name FROM Losers

while ($name = mysql_fetch...) {
    print $name.' '.$l_count[$name]."\n";
}

Удачи!

0 голосов
/ 24 февраля 2012

Использование SQL

SELECT field 1, field 2, field 3, COUNT(*)
FROM table
GROUP BY field 1, field 2, field 3

Этот SQL выдаст вам все отдельные строки и выдает число раз, когда они появляются

...