Хотя вы можете найти гораздо более сложные примеры (например, , или даже , ) - это действительно простой пример, с которым вы можете поиграть:
[118 ]
// Select DOM elements
var rangeSlider = document.getElementById('range');
var textInput = document.getElementById('textInput');
// Add event listeners
rangeSlider.addEventListener('mouseup', function() {
textInput.style.visibility = 'hidden';
});
rangeSlider.addEventListener('mousedown', function() {
textInput.style.visibility = 'visible';
});
function updateTextInput(val) {
textInput.value = val;
}
#textInput { visibility: hidden; }
Надежда, которая помогает и удачи!
РЕДАКТИРОВАТЬ:
Didn Я не совсем понимаю вашу проблему. Основываясь на твоей скрипке, я сделал что-то подобное:
var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
var result = document.getElementById('result');
output.innerHTML = slider.value;
filterSystem();
slider.oninput = function() {
output.innerHTML = this.value;
filterSystem();
}
function filterSystem() {
var currentMatch = document.querySelectorAll('.js-match');
for (var i=0; i
.slidecontainer {
width: 100%;
}
.slider {
-webkit-appearance: none;
width: 100%;
height: 15px;
border-radius: 5px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
}
.slider:hover {
opacity: 1;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 50%;
background: #4CAF50;
cursor: pointer;
}
.slider::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 50%;
background: #4CAF50;
cursor: pointer;
}
.js-match {display: none;}
Round Range Slider
Value:
1
22
333
4444
55555
Скорее всего, дополнительные объединения убивают вас. Что если вы сделаете:
SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers
WHERE EXISTS( SELECT *
FROM SubscriberGroups
WHERE Subscribers.ID=SubscriberGroups.SubscriberID
AND SubscriberGroups.GroupID IN ('1', '2', '3') )
AND NOT EXISTS( SELECT *
FROM SubscriberGroups
WHERE Subscribers.ID=SubscriberGroups.SubscriberID
AND SubscriberGroups.GroupID IN ('4', '5', '6')
);
Вы также хотели бы убедиться, что у вас есть индекс для SubscriberGroups (SubscriberID, GroupID)
Я предполагаю, что у подписчиков уже есть индекс по ID, верно?
EDIT: Другой вариант, который может быть или не быть быстрее. Посмотрите на планы запросов каждого, чтобы увидеть ...
Это может быть одно сканирование индекса, которое может быть быстрее, чем два поиска индекса, но это зависит от оптимизатора SQLite ...
SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers
INNER JOIN( SELECT SUM( CASE WHEN GroupID IN('1', '2', '3') THEN 1 ELSE 0 END ) AS inGroup,
SUM( CASE WHEN GroupID IN('4', '5', '6') THEN 1 ELSE 0 END ) AS outGroup,
SubscriberID
FROM SubscriberGroups
WHERE SubscriberGroups.GroupID IN ('1', '2', '3', '4', '5', '6' )
) SubscriberGroups
ON Subscribers.ID=SubscriberGroups.SubscriberID
AND inGroup > 0
AND outGroup = 0
Еще один способ написать SQL, который может быть быстрее (у меня нет SQLite для тестирования):
SELECT
S.ID,
'1' AS TemplateID -- Is this really a string? Does it need to be?
FROM
Subscribers S
LEFT OUTER JOIN SubscriberGroups SG ON
SG.SubscriberID = S.ID
WHERE
SG.SubscriberID IS NULL AND
EXISTS
(
SELECT
*
FROM
SubscriberGroups SG2
WHERE
SG2.SubscriberID = S.ID AND
SG2.GroupID IN ('1', '2', '3') -- Again, really strings?
)
Метод Мэтта также должен хорошо работать. Все зависит только от того, как SQLite решит создавать планы запросов.
Также обратите внимание на мои комментарии. Если они действительно определены как типы данных INT в вашей базе данных, потребуется дополнительная обработка для преобразования между двумя разными типами данных. Если они являются строками в базе данных, есть ли причина для этого? У вас есть нечисловые значения в этих столбцах?