L
L
lexstile2020-10-03 10:56:32
SQL
lexstile, 2020-10-03 10:56:32

How to properly expand a query?

There is a request:

SELECT events.id, events.name as event_name, events.date_start, events.date_end, events.country_id, events.description, events.day_1, events.day_2, events.month_1, events.month_2, events.year_1, events.year_2, events.is_present, countries.name as country_name, links.links, images.images, clusters.clusters FROM events
    LEFT JOIN countries ON events.country_id = countries.id
    LEFT JOIN (SELECT event_id, GROUP_CONCAT(link) as links FROM links GROUP BY event_id) AS links ON events.id = links.event_id
    LEFT JOIN (SELECT event_id, GROUP_CONCAT(name) as images FROM images GROUP BY event_id) AS images ON events.id = images.event_id
    LEFT JOIN keywords ON events.id = keywords.event_id
    LEFT JOIN (SELECT country_id as c_id, GROUP_CONCAT(name) as clusters FROM clusters GROUP BY c_id) AS clusters ON countries.id = c_id
    WHERE (events.name LIKE :search || events.description LIKE :search || keywords.name LIKE :search || countries.name LIKE :search) 
    ORDER BY events.year_1 ASC
    LIMIT 100

Previously, there was only one country associated with the event (all countries are in the countries table)
Now we have added a new table country_to_event , where there are only three fields: id, event_id, country_id (so that an event can have several countries)

How can I get the names of countries associated with event within the request?

UPD: replaced JOIN with countries with this one, but you need to concatenate with a comma through GROUP_CONCAT, there is only one country
LEFT JOIN (SELECT countries.id, event_to_country.event_id, countries.name as countries FROM countries LEFT JOIN event_to_country ON countries.id = event_to_country.country_id) as countries ON events.id = countries.event_id

Answer the question

In order to leave comments, you need to log in

1 answer(s)
L
lexstile, 2020-10-03
@lexstile

Did it like this:

LEFT JOIN (SELECT countries.id, event_to_country.event_id, GROUP_CONCAT(countries.name) as countries FROM countries LEFT JOIN event_to_country ON countries.id = event_to_country.country_id GROUP BY event_to_country.event_id) as countries ON events.id = countries.event_id

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question