I have two tables country and users. The country holds id's for every country in the world. When a user registers into the system the id of country is saved in a column named country as a foreign key.
Now what I want to do is to count how many countries users registered, for instance 3 users registered from the United States, It would show the name of the country and how many users registered from that country like this United States : 3 and so on, only for the countries that users registered from.
Here is my Schema:
users table
country table:
Here is what I tried however I am not able to understand how to make it work properly:
<?php
$query = $conn->prepare("SELECT users.id
AS userid, users.country AS country,
country.id AS countryID, country.country_name AS countryName
FROM users
LEFT JOIN country
ON country.id = users.country
WHERE users.name is not null;");
$query->execute();
while($row = $query->fetch()){
$countriesID = $row["countryID"];
$countryNames = $row["countryName"];
if($row["country"] == $countriesID){
$totalCountryq = $conn->prepare("SELECT COUNT(users.country) as c FROM users LEFT JOIN country ON users.country = country.id;");
$totalCountryq->execute();
if($row2 = $totalCountryq->fetchAll()){
$total = $row2['c'];
print_r($total);
}
}
//echo $countriesID;
}
?>
Advertisement
Answer
SELECT c.id, c.country_name, count(u.country) AS country_count FROM counrty AS c JOIN users AS u ON u.country = c.id GROUP BY c.id ORDER BY country_count DESC

