Существует два главного привыкнуть приблизительно к хранилищу данных Механизма Приложения когда по сравнению с 'традиционными' реляционными базами данных:
ключевая вещь понять - и причина позади обоих этих различий - состоит в том, что Bigtable в основном действует как огромный заказанный словарь. Таким образом помещенная операция просто устанавливает значение для данного ключа - независимо от любого предыдущего значения для того ключа, и операции выборки ограничены выборкой единственных ключей или непрерывных диапазонов ключей. Более сложные запросы сделаны возможными с индексами, которые являются в основном просто собственными таблицами, позволяя Вам реализовать более сложные запросы как сканирования на непрерывных диапазонах.
, Как только Вы поглотили это, Вам были нужны элементарные знания для понимания возможностей и ограничений хранилища данных. Ограничения, которые, возможно, казались произвольными, вероятно, имеют больше смысла.
ключевая вещь здесь состоит в том, что, хотя это ограничения по тому, что можно сделать в реляционной базе данных, эти те же ограничения - то, что делает ее практичной для увеличения масштаба к виду величины, которую Bigtable разработан для обработки. Вы просто не можете выполнить вид запроса, который выглядит хорошим на бумаге, но является ужасно медленным в базе данных SQL.
С точки зрения того, как измениться, как Вы представляете данные, самой важной вещью является предварительное вычисление. Вместо того, чтобы делать соединения во время запроса, предварительно вычислите данные и сохраните его в хранилище данных по мере возможности. Если Вы хотите выбрать случайную запись, генерировать случайное число и снабдить его каждой записью. Там является целой поваренной книгой подобных подсказок и обманывает здесь забастовка> Редактирование: поваренная книга больше не является существующей.
Вы можете сделать это с помощью простого цикла - может быть более умный способ справиться с этим с помощью селекторов jQuery, которых я не вижу. Следующее должно работать:
var usedNames = {};
$("select[name='company'] > option").each(function () {
if(usedNames[this.text]) {
$(this).remove();
} else {
usedNames[this.text] = this.value;
}
});
Изменить: Вот однострочник в функциональном стиле, который делает это с помощью отличного Underscore.js , хотя предыдущая версия почти наверняка более эффективна:
_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); });
Вы можете сделать что-то вроде этого:
var previousOption;
$('select[name=company] option').each(function() {
if (this.text == previousOption) $(this).remove();
previousOption= this.text;
});
Вы можете попробовать следующий код, он удалит дубликаты независимо от их положения. Здесь #targetSelect - это ваш целевой Dropdown
var a = new Array();
$(#targetSelect).children("option").each(function(x){
test = false;
b = a[x] = $(this).text();
for (i=0;i<a.length-1;i++){
if (b ==a[i]) test =true;
}
if (test) $(this).remove();
});