I am having some trouble with queries 6 and 8 (below).
Query 6: I haven't figured out how to get the name of the city with the largest population. (everything else works)
What I need it to do: For each country, list the largest population of any of its cities and the name of that city. Order the results alphabetically by country.
Gives error: Query failed: ERROR: missing FROM-clause entry for table "city" LINE 13: ON (city.population = sq.pop) ^
Query 8: I haven't figured out how to get the capital name. (everything else works)
What I need it to do: For each country with 5-10 languages, list the number of languages spoken, in descending order by number of languages as well as the name of the capital for that country.
Gives error: Query failed: ERROR: missing FROM-clause entry for table "city" LINE 13: ON (country.capital = city.id) ^
(I'm not asking for a complete solution to the queries - just an idea to fix the code I have)
It seems like I need two inner joins on both of them, but maybe something is wrong with my syntax.
Are two inner joins in a single query acceptable?
Is there a syntax error? (I have checked the online documentation, and it seems okay. But maybe I am missing something).
Is there a better way to attempt this than two inner joins?
Here is the relavent snippet of the code: (all other queries and related code works properly)
elseif($_POST["query"] == "6") //need help getting name of city with max pop (everything else prints fine) { $query = "SELECT country.name AS country, largest_city, sq.pop AS population FROM lab6.country INNER JOIN (SELECT MAX(city.population) AS pop, country_code FROM lab6.city GROUP BY country_code) AS sq USING (country_code) INNER JOIN (SELECT city.name AS largest_city FROM lab6.city) AS sq1 ON (city.population = sq.pop) ORDER BY country.name ASC"; } elseif($_POST["query"] == "8") //need help getting capital name (everything else prints fine) { $query = "SELECT country.name, capital, lang_count FROM lab6.country INNER JOIN (SELECT count(language) AS lang_count, country_code FROM lab6.country_language GROUP BY country_code) AS sq USING (country_code) INNER JOIN (SELECT city.name AS capital, city.id FROM lab6.city) AS sq1 ON (country.capital = city.id) ORDER BY lang_count DESC, capital DESC"; } This was solved. Here is the code that worked.
elseif($_POST["query"] == "6") { $query = "SELECT country.name AS country, largest_city, sq.pop AS population FROM lab6.country INNER JOIN (SELECT MAX(city.population) AS pop, country_code FROM lab6.city GROUP BY country_code) AS sq USING (country_code) INNER JOIN (SELECT city.name AS largest_city, city.population FROM lab6.city) AS sq1 ON (sq1.population = sq.pop) ORDER BY country.name ASC"; } elseif($_POST["query"] == "8") { $query = "SELECT country.name, sq1.capital AS capital, lang_count FROM lab6.country INNER JOIN (SELECT count(language) AS lang_count, country_code FROM lab6.country_language GROUP BY country_code) AS sq USING (country_code) INNER JOIN (SELECT city.name AS capital, city.id FROM lab6.city) AS sq1 ON (country.capital = sq1.id) ORDER BY lang_count DESC, capital DESC"; }