Улучшение SQL с помощью подзапроса WHERE - PullRequest
1 голос
/ 03 августа 2011

У меня есть этот SQL, который работает нормально, хотя и немного медленно. В идеале хотелось бы иметь дополнительный подзапрос в предложении where что-то вроде этого и country_iso = "uk".

SELECT c.content_name, c.content_telephone, c.content_address1
    (SELECT w.weblink_url FROM weblinks w WHERE w.content_id = c.content_id ORDER BY w.weblink_ordering, w.weblink_id ASC LIMIT 1) 
    AS content_url,                                                          
     (SELECT country_name FROM countries WHERE country_id = c.country_id LIMIT 1)
    AS country_name,                                                                                                                     
     (SELECT country_iso FROM countries WHERE country_id = c.country_id LIMIT 1)
    AS country_iso
    FROM catcontents cc                                                     
    LEFT JOIN content c ON c.content_id = cc.content_id                                                         
    WHERE cc.category_id = 7 
    AND (SELECT country_iso FROM countries WHERE country_id = c.country_id LIMIT 1) = 'uk' 
ORDER BY cc.catcontent_ordering ASC, c.content_name ASC

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Этот запрос не подойдет вашим потребностям?(в основном, используйте объединения, чтобы получить страну, а не суб-выбор.)

SELECT
    c.content_name,
    c.content_telephone,
    c.content_address1,

    countries.country_name,
    countries.country_iso,

    (
        SELECT w.weblink_url 
        FROM weblinks w 
        WHERE w.content_id = c.content_id 
        ORDER BY w.weblink_ordering, w.weblink_id ASC 
        LIMIT 1
    ) content_url

FROM catcontents cc
LEFT JOIN content c ON c.content_id = cc.content_id
JOIN countries ON countries.country_id = c.country_id

WHERE cc.category_id = 7
AND countries.country_iso = 'uk'

ORDER BY cc.catcontent_ordering ASC, c.content_name ASC
0 голосов
/ 03 августа 2011
SELECT  c.content_name,
        c.content_telephone,
        c.content_address1,
        w.weblink_url content_url,
        country_name,
        country_iso
FROM catcontents cc                                                     
LEFT JOIN content c ON c.content_id = cc.content_id
LEFT JOIN weblink_url w ON w.content_id = c.content_id
JOIN   countries ON   country_id = c.country_id
                  AND  country_iso = 'uk'                                    
WHERE cc.category_id = 7 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...