Используйте CountDownTimer
для достижения.
final AlertDialog.Builder dialog = new AlertDialog.Builder(this)
.setTitle("Leaving launcher").setMessage(
"Are you sure you want to leave the launcher?");
dialog.setPositiveButton("Confirm",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
exitLauncher();
}
});
final AlertDialog alert = dialog.create();
alert.show();
new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
alert.dismiss();
}
}.start();
select item.name
from item
where item.attribute in ('4 legs', 'green')
group by item.name
having count(distinct item.attribute) = 2
Самый эффективный способ сделать это - использовать самосоединение:
SELECT * FROM attributes a1
JOIN attributes a2 USING (item_name) -- e.g. frog
WHERE a1.value = 'green' AND a2.value = '4 legs';
Другое решение, которое используют некоторые люди, - это трюк с GROUP BY:
SELECT item_name FROM attributes
WHERE value IN ('4 legs', 'green')
GROUP BY item_name
HAVING COUNT(*) = 2;
Но решение GROUP BY может не быть таким же эффективным, как JOIN, в зависимости от того, какую марку СУБД вы используете. Также один метод может лучше масштабироваться по мере увеличения объема в вашей таблице.
select
item, count(*)
from
@temp
where
attribute in ('4 legs','green')
group by
item
having
count(*) = 2 -- this "2" needs to be replaced with however many attributes you have
Я использовал эти системы так, как вы описываете, в Windows с Visual Studio 2008:
Если вы цените свою жизнь, никогда не используют Visual Source Safe ...
Трудно, потому что это не нормализованная модель. Сейчас выходные.
Вы фильтруете несколько несвязанных строк, поэтому вам придется извлекать каждый атрибут по очереди, а затем сопоставлять элементы.
SELECT
item
FROM
(SELECT
item
FROM
Mytable
WHERE
attribute = '4 legs') k1
JOIN
(SELECT
item
FROM
Mytable
WHERE
attribute = 'green') k2 ON k1.item = k2.item
You could also query each attribute separately, and then intersect them...
/*
-- create sample table...
create table #temp1
(item varchar(max),
attrib varchar(max))
-- populate sample table (SQL 08)...
insert #temp1
values ('frog', 'green'), ('cat', 'furry'), ('frog', 'nice'), ('cat', '4 legs'), ('frog', '4 legs')
*/
SELECT item
FROM #temp1
WHERE attrib = 'green'
INTERSECT
SELECT item
FROM #temp1
WHERE attrib = '4 legs'
создайте две таблицы, одну предметов и один из атрибутов.
Элементы могут иметь имя intAttributeID, где intAttributeID - это ссылка внешнего ключа на таблицу атрибутов. Таким образом, вы можете сделать оператор select на основе того, что вам интересно.
Но, возможно, это поможет вам:
SELECT *
FROM tbl t1
INNER JOIN tbl t2 ON t1.Name = t2.Name
WHERE t1.Attribute = 'green' AND t2.Attribute = '4 legs'
Если можно, перепроектирую. Это не то, что вы когда-либо сможете эффективно запросить 12 значений одновременно (для этого потребуется 12 объединений)
Прочтите эту статью в Википедии http://en.wikipedia.org/wiki/Entity-Attribute-Value_model#Downsides
Никогда еще не видел базы данных, в которой использовалась бы эта модель, которая в конечном итоге не столкнулась бы с серьезными проблемами производительности. Такой дизайн выглядит элегантно для людей, не занимающихся базами данных, но на самом деле обычно является признаком плохо спроектированной базы данных.