У меня есть этот запрос:
SELECT COUNT(articles.id) AS count
FROM articles, xml_documents, streams
WHERE articles.xml_document_id = xml_documents.id
AND xml_documents.stream_id = streams.id
AND articles.published_at BETWEEN '2010-01-01' AND '2010-04-01'
AND streams.brand_id = 7
Который просто использует уравнение по умолчанию, указав три таблицы в формате csv в предложении FROM. Что мне нужно сделать, это сгруппировать это по значению, найденному в элементах article.source (raw xml) .., чтобы оно могло превратиться в :
SELECT COUNT(articles.id) AS count, ExtractValue(articles.source, "/article/media_type") AS media_type
FROM articles, xml_documents, streams
WHERE articles.xml_document_id = xml_documents.id
AND xml_documents.stream_id = streams.id
AND articles.published_at BETWEEN '2010-01-01' AND '2010-04-01'
AND streams.brand_id = 7
GROUP BY media_type
, который работает нормально, проблема в том, что я использую рельсы и использую STI для таблицы xml_documents. article.source , предоставленный методу ExtractValue , будет иметь несколько различных форматов. Поэтому мне нужно иметь возможность использовать "/ article / media_type" IF xml_documents.type = 'source one' и используйте "/ article / source", если xml_documents.type = 'source two'
Это просто потому, что два типа документов по-разному форматируют свои XML, но я не хочу запускать несколько запросов для получения этой информации.
Было бы неплохо, если бы можно было использовать троичный оператор, но я не думаю, что это возможно ..
EDIT
На данный момент я рассматриваю создание временной таблицы или просто использование UNION для объединения нескольких наборов результатов ..