С MySQL мы можем использовать условное агрегирование. Сокращенная версия примерно такая:
SELECT t.parent_id
, t.stage
, SUM(t.results = 'no') AS stage_no_count
, SUM(t.results = 'yes') AS stage_yes_count
FROM stages t
GROUP
BY t.parent_id
, t.stage
Более переносимая и совместимая со стандартом ANSI SQL
SELECT t.parent_id
, t.stage
, SUM(CASE t.results WHEN 'no' THEN 1 ELSE 0 END) AS stage_no_count
, SUM(CASE t.results WHEN 'yes' THEN 1 ELSE 0 END) AS stage_yes_count
FROM stages t
GROUP
BY t.parent_id
, t.stage
(Существует небольшая разница с обработкой значений NULL для results
, независимо от того, вернуть 0 или NULL)
К сожалению, единственный программный интерфейс для этого (Dictionary Services) не поддерживает настройку словаря.
Однако, он использует настройки словаря, чтобы использовать первый указанный словарь, так что вы можете потенциально, очень некрасиво, сбросьте настройки, чтобы тезаурус был единственным доступным словарем.
Это действительно отвратительно и может сломаться, если на него надышаться, но оно должно работать:
/* compile with:
gcc -o thesaurus -framework CoreServices -framework Foundation thesaurus.m
*/
#import <Foundation/Foundation.h>
#include <CoreServices/CoreServices.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dictionaryPrefs =
[[userDefaults persistentDomainForName:@"com.apple.DictionaryServices"] mutableCopy];
NSArray *activeDictionaries = [dictionaryPrefs objectForKey:@"DCSActiveDictionaries"];
[dictionaryPrefs setObject:
[NSArray arrayWithObject:@"/Library/Dictionaries/Oxford American Writer's Thesaurus.dictionary"]
forKey:@"DCSActiveDictionaries"];
[userDefaults setPersistentDomain:dictionaryPrefs forName:@"com.apple.DictionaryServices"];
NSString *word = [NSString stringWithUTF8String:argv[1]];
puts([(NSString *)DCSCopyTextDefinition(NULL, (CFStringRef)word,
CFRangeMake(0, [word length])) UTF8String]);
[dictionaryPrefs setObject:activeDictionaries forKey: @"DCSActiveDictionaries"];
[userDefaults setPersistentDomain:dictionaryPrefs forName:@"com.apple.DictionaryServices"];
}
И использовать его как:
% ./thesaurus string
noun
1 twine, cord, yarn, thread, strand.
2 chain, group, firm, company.
3 series, succession, chain, sequence, run, streak.
4 line, train, procession, queue, file, column, convoy, cavalcade.
[...]