Bunun için daha önce sorulmuş something similar olduğunu düşünüyorum, ancak bunu anlayamıyorum. Cordova uygulamasında bir SQL veritabanından iki dizim var. Bu iki diziyi birleştirmek ve arama sorgusuyla en iyi eşleşmeyi sağlamak mümkün mü?Birden çok JavaScript dizisini, bir terime göre alaka düzeyi ile birleştirme ve sıralama
Uygulamamda, birden çok yerel tabloyu ve siparişi en iyi eşleşmeyle arayan bir arama işlevine sahibim. Bu ince
SQL Sorgu Örnek çalışır:
tx.executeSql("SELECT * FROM contacts WHERE f_name LIKE ? ORDER BY (CASE WHEN f_name = ? THEN 1 WHEN f_name LIKE ? THEN 2 ELSE 3 END), f_name ",["%" + query + "%", query, query + "%"],onSuccess, onError);
bu işlem tekrarlanır ve farklı diziler farklı tablolar Aranan için oluşturulur.
Biri kullanıcılar için, biri de mesaj içeriği için olmak üzere 2 tablo bıraktım. SQL sorguları ardından çağrı geri fonksiyonu çalıştırmak 1 diziye Sonuçları sıralar sonra:
var allResults = [];
// create an array of all
for(var x = 0; x < allChatSearchResults.users.length; x++){
var result = allChatSearchResults.users[x];
result['type'] = 'user';
allResults[allResults.length] = result;
}
for(var x = 0; x < allChatSearchResults.messages.length; x++){
var result = allChatSearchResults.messages[x];
result['type'] = 'message';
allResults[allResults.length] = result;
}
bir yöntem i arama sorgusuyla eşleşecek şekilde diziye döngü
allResults kullanabilir ve bu diziyi yeniden düzenleyebilirsiniz var mı .
allResults = [
{
type : 'user',
f_name : 'username',
l_name : 'somename'
},
{
type : 'message',
message : 'this is my user name', ////// query from sql matches this
date : '11/04/2016'
},
{
type : 'message',
message : 'another containing username', ////// query from sql matches this
date : '09/04/2016'
},
//and so on
];
Tam Kod:
var searchResultsSource = 0;
var allChatSearchResults = {users : [], messages : []};
var searchChatResults = function (type, query, res){
searchResultsSource++;
if(res.length > 0){
for(var x = 0; x < res.length; x++){ allChatSearchResults[type][x] = res[x]; }
}
if(searchResultsSource == 2){
//run the function
console.log('Search Results', allChatSearchResults);
var allResults = [];
// create an array of all
for(var x = 0; x < allChatSearchResults.users.length; x++){
var result = allChatSearchResults.users[x];
result['type'] = 'user';
allResults[allResults.length] = result;
}
for(var x = 0; x < allChatSearchResults.messages.length; x++){
var result = allChatSearchResults.messages[x];
result['type'] = 'message';
allResults[allResults.length] = result;
}
// create an array of just search query
// reorder the array based on the ordered search query
}
};
var searchChats = function() {
var query = $('#activeChatSearch').val();
query = query.toLowerCase();
if(query.length > 3){
//search my chats
//search users and search messages
db.transaction(function(tx) {
var users = [];
var chats = [];
var messages = [];
tx.executeSql("SELECT * FROM contacts WHERE f_name LIKE ? ORDER BY (CASE WHEN f_name = ? THEN 1 WHEN f_name LIKE ? THEN 2 ELSE 3 END), f_name ",["%" + query + "%", query, query + "%"], function (tx, res){
if(res.rows.length == 0){ console.log('no users with first name ' + query); }
for(var x = 0; x < res.rows.length; x++){ users[x] = res.rows.item(x); }
searchChatResults('users', query, users);
}, function (tx, error){
console.log(error.message);
});
tx.executeSql("SELECT * FROM active_chats ORDER BY last_changed DESC", [], function (tx, res){
if(res.rows.length > 0){
var count = 0;
var max = res.rows.length;
var results = res.rows;
var searchThisChat = function (tx, query, chatID){
tx.executeSql("SELECT * FROM chat_" + chatID + " WHERE message LIKE ? ORDER BY (CASE WHEN message = ? THEN 1 WHEN message LIKE ? THEN 2 ELSE 3 END), message LIMIT 0,1", ["%" + query + "%", query, query + "%"], function (tx, res){
if(res.rows.length == 0){ /*console.log('No chats match query',messages); */ }
else { messages[messages.length] = res.rows.item(0); }
if(count == max){ searchChatResults('messages', query, messages); } else{ searchThisChat(tx, query, results.item(count).chat_id); count++; }
}, function (tx, e){
console.log(e.message);
if(count == max){ searchChatResults('messages', query, messages); } else{ searchThisChat(tx, query, results.item(count).chat_id); count++; }
});
};
searchThisChat(tx, query, res.rows.item(0).chat_id);
}
}, function (tx, e){
console.log(e.message);
});
}, function(err) {
console.log('Open database ERROR: ', err);
});
var activeChats = $('#activeChats');
activeChats.html('');
for(var x = 0; x < 6; x++){
var item = formatCurrentChatItem(
{f_name : query, l_name : 'Bloggs', 'user_id' : 18},
null,
null
);
item.appendTo(activeChats);
}
}
};
$(function() {
$('#activeChatSearch').on('input', searchChats);
$('#activeChatSearchBtn').on('click', searchChats); <- input function
});
Sorunuz belirsiz. Örnek bir giriş sağlayın ve gerekli çıkış – Amit
Tam işlevini gösteriyorum, uzun bir süre kısaltmaya çalıştım sadece –
Düzenlemeniz (maalesef) kötü bir düzenleme. Tam kodunuz gerekli değildir. ** örnek giriş ve gerekli çıktı ** sağlamanız gerekir. Başarısız bir girişiminiz varsa, ilgili kodu (** sadece ** ilgili kodu) ekleyin. – Amit