Добро пожаловать в S / O. Как правило, вы хотите предоставить более реалистичные образцы таблиц структур и данных, чтобы представить их как минимум критически важные для вашего вопроса. если когда-либо частные данные, составьте, но держите их в точном контексте.
При этом, я не думаю, что у вас на самом деле есть стол яблок, груш и яблок & amp; груши, но я буду подыгрывать.
Я предполагаю (пример), что у вас есть таблица людей и другая таблица вещей, с которой они связаны в дочерней таблице. Я бы сделал ПЕРВЫЙ на человека, для тех, кто ДЕЙСТВИТЕЛЬНО связан с записью «яблок и груш», затем сделал ЛЕВЫЙ ПОДКЛЮЧЕНИЕ к тому же дочернему столу один раз для яблок, другой для груш. Вы можете определить, что вы хотите сделать с результатами (например, удалить из отдельных яблок, записи груш ребенка).
Select
p.LastName,
p.FirstName,
case when justApples.PersonID IS NULL
then 'No' else 'Yes' end as AlsoHasApples,
case when justPears.PersonID IS NULL
then 'No' else 'Yes' end as AlsoHasPears
from
Person p
JOIN Fruits f
on p.PersonID = f.personID
AND f.Description = 'Apples & Pears'
LEFT JOIN Fruits justApples
on p.PersonID = justApples.PersonID
AND f.Description = 'Apples'
LEFT JOIN Fruits justPears
on p.PersonID = justPears.PersonID
AND f.Description = 'Pears'
Так как первый «(внутренний) JOIN» явно ищет те, которые помечены как яблоки & amp; рекорд груши, который минимизирует список только тем предварительно квалифицированным людям.
Затем, два «LEFT-JOIN» явно ищут ДРУГИЕ индивидуализированные «Яблоки» и «Груши» соответственно.
При тестировании IS NULL покажет, есть ли у человека (или нет через NULL) этот предмет.
Если вы ТОЛЬКО ХОТИТЕ вернуть те, которые являются яблоками & amp; Груши И имеют один или оба других отдельных элемента, вы можете добавить в конце предложение WHERE, например
WHERE
justApples.PersonID IS NOT NULL
OR justPears.PersonID IS NOT NULL
. Инверсией будет предварительная квалификация justApples и justPears, а НЕ помеченная как связанная с Яблоки и Груши, такие как ТРЕБУЮЩИЕ СОЕДИНЕНИЯ к яблокам и грушам индивидуально и ЛЕВЫЕ СОЕДИНЕНИЯ с записью комбинации
Select
p.LastName,
p.FirstName,
case when f.PersonID IS NULL
then 'No' else 'Yes' end as IsAssociatedWithApplesAndPearsRecord
from
Person p
JOIN Fruits justApples
on p.PersonID = justApples.PersonID
AND f.Description = 'Apples'
JOIN Fruits justPears
on p.PersonID = justPears.PersonID
AND f.Description = 'Pears'
LEFT JOIN Fruits f
on p.PersonID = f.personID
AND f.Description = 'Apples & Pears'
Два соединения с индивидуальной ЗАПРОСОМ каждой отдельной части, и ЛЕВОЕ СОЕДИНЕНИЕ показывает, ЕСЛИ они также отмечены как комбинация записей. Как видно из неоднозначности в вашем вопросе, предоставление чуть более подробной информации о том, что вы хотите, может значительно помочь получить более точный ответ на ваши истинные потребности. Старайтесь не маскировать детали к контексту, но маскируйте сами данные примера, когда возникает проблема с более частными проблемами.
Имя поля не foo
, это foo []
. Вы можете использовать селектор attributeStartsWith :
$("input[name^='foo']:checked:enabled",'#myform');
В идеале вы могли бы сделать это:
$("input[name='foo[]']:checked:enabled",'#myform');
Но, как этот ответ объясняет, jQuery использует это для анализа ] value
часть условия attr = value
:
(['"]*)(.*?)\3|)\s*\]
\ 3 - это группа, содержащая открывающие кавычки, которые, как ни странно, могут быть множественными открывающими кавычками или вообще не открывать кавычки. . *? затем может анализировать любой символ, включая кавычки, пока он не встретит первый символ ‘]’, завершив совпадение.Специальных символов CSS с экранированием обратной косой чертой не предусмотрено, поэтому вы не можете сопоставить произвольное строковое значение в jQuery.
Другими словами, как только jQuery достигает первого ]
, он считает, что значение окончено. Итак, вы застряли с startWith или с использованием чистых элементов DOM, как также объясняется в этом ответе.
SUPER DUPER ВАЖНОЕ РЕДАКТИРОВАНИЕ :
Эта ошибка, по-видимому, исправлена. Вы должны уметь использовать код, который я назвал «идеальным» выше.
Вы должны указать этот атрибут при выборе и включить []
:
$("#myform input[name='foo[]']:checked:enabled");
На самом деле, то, что у вас работает, отлично работает, просто используйте двойные кавычки и включите скобки, чтобы они могли матч.
$("#myform input[name='foo[]']:checked:enabled");
Вы можете увидеть это в действии здесь: http://jsbin.com/oyoro
Обратите внимание, что в прошлом в jQuery были проблемы с скобками, что может объяснить большую путаницу вокруг необходимости побега. Я знаю, что у меня были проблемы с квадратными скобками и просто цитирование.
Я считаю, что это происходит примерно так:
$("input #foo[] :checked");
РЕДАКТИРОВАТЬ: Комментатор прав. Я должен был пойти с моим первым ответом. :) На этот раз я собираюсь использовать «^».
$("input[name^=foo] :checked");