başka bir seçenek: (hoşuna gidecek ve eğer başlangıç noktası)
aşağıda
size bir fikir vermelidir burada
fikirdir bir şekilde kullanılabilecek olandan bu ekstra alanla [data.reports] Tablo zenginleştirmek katılmak kriterler
SELECT spot, match FROM JS(
(
SELECT spot, pat
FROM (
SELECT spot FROM [data.reports]
) AS t1
CROSS JOIN (
SELECT GROUP_CONCAT(UNIQUE(name), '|') AS pat FROM [data.operators]
) AS t2
) ,
spot, pat,
"[{name: 'spot', type:'string'},
{name: 'match', type:'string'}]
",
"function(r, emit) {
var re = new RegExp(r.pat, 'gi');
var matches = r.spot.match(re);
if (matches) {
for (j=0; j < matches.length; ++j) {
emit({spot: r.spot, match: matches[j]});
}
}
}"
)
şimdi yerinde birlikte maç alanı var, sen = yy.name hangi tablosundan gelir sizin dış seçme alan net değil
xx.match ÜZERİNE JOIN yapabilir, bu yüzden öyleyim buradan ayrılıyor
.210 Eğer bu tamamlayacak umut senin aşağıda
testi içindir kendi:
SELECT spot, pat, match FROM JS(
(
SELECT spot, pat
FROM (
SELECT spot FROM
(SELECT '11aaa22ccc99' AS spot),
(SELECT '33aaa44' AS spot),
(SELECT '55bbb66' AS spot),
(SELECT '77ddd88' AS spot),
) AS t1
CROSS JOIN (
SELECT GROUP_CONCAT(UNIQUE(name), '|') AS pat FROM
(SELECT 'aaa' AS name),
(SELECT 'bbb' AS name),
(SELECT 'ccc' AS name),
) AS t2
) ,
spot, pat,
"[{name: 'spot', type:'string'},
{name: 'pat', type:'string'},
{name: 'match', type:'string'}]
",
"function(r, emit) {
var re = new RegExp(r.pat, 'gi');
var matches = r.spot.match(re);
if (matches) {
for (j=0; j < matches.length; ++j) {
emit({spot: r.spot, pat: r.pat, match: matches[j]});
}
}
}"
)
Önemli SO üzerinde - Eğer 'işareti oylama altında, yayınlanan cevabın soldaki kene kullanarak answer' kabul edebilir . Bunun neden önemli olduğu konusunda http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 adresine bakın! Ayrıca cevapta oy vermek de önemlidir. Yardımcı olan cevapları oylayın. Daha fazlası var ... Birisi sorunuza cevap verdiğinde ne yapacağınızı kontrol edebilirsiniz - http://stackoverflow.com/help/someone-answers. –