4D v16.3QUERY BY ATTRIBUTE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY ATTRIBUTE
QUERY BY ATTRIBUTE
QUERY BY ATTRIBUTE localiza os registros que correspondam com a string de consulta definida utilizando os parâmetros campoObjeto, caminhoAtributo, opPesq e valor e retorna uma seleção de registros para a tabela. QUERY BY ATTRIBUTE altera a seleção atual de tabela para o processo atual e faz o primeiro registro da nova seleção do registro atual. Se o parâmetro tabela for omitido, o comando aplica-se a tabela como padrão. Se você não tiver definido qualquer tabela padrão, ocorre um erro. O parâmetro opcional opConj é usado para combinar várias chamadas a QUERY BY ATTRIBUTE no caso de várias pesquisas. Os operadores de conjunção disponíveis são o mesmo que o comando QUERY:
O parâmetro opConj não é usado para a primeira chamada para QUERY BY ATTRIBUTE de uma consulta múltipla, ou se a pesquisa for uma busca simples. Se você omitir esse parâmetro dentro de uma pesquisa múltipla, o operador AND (&) é usado como padrão. Em campoObjeto, passe o campo objeto cujos atributos que você deseja pesquisar. Se pertence a uma tabela Um relacionada à tabela com uma relação automática ou manual, o campoObjeto pode pertencer a uma outra tabela. Em caminhoAtributo, passe o nome ou o caminho do atributo cujos valores deseja comparar. Pode passar um único atributo, por exemplo, "age": nesse caso todos os atributos com o nome serão comparados no registro. Você pode também passar um caminho, por exemplo "children.girls.age", neste caso todos os atributos com este nome serão comparados no registro. Pode também passar um caminho, por exemplo "children.girls.age", em cujo caso só os atributos coincidentes serão comparados no registro. Se um atributo "x" for um array, QUERY BY ATTRIBUTE buscará registros que contenham um atributo "x" no qual ao menos um elemento coincida com os critérios. Para buscar em atributos array, é necessário indicar ao comando QUERY BY ATTRIBUTE que o atributo "x" é um array adicionando ".[]" a seu nome em caminhoAtributo (ver exemplo 3). Notas:
valor é o dado contra o qual irá comparar caminhoAtributo. O valor pode ser qualquer expressão do mesmo tipo que caminhoAtributo. O valor é avaliado uma vez, no início da busca. O valor não é avaliado para cada registro. Para procurar uma string dentro de uma string (uma procura "contém"), use o sinal de arroba (@) em valor para isolar a string a pesquisar, como mostrado neste exemplo: "@ Smith @". Note-se que, neste caso, a busca apenas parcialmente se benefícia do índice (compacidade de armazenamento de dados). Esta é a estrutura de uma consulta por atributos: QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";=;value) NOta: um critério implícito para todos os operadores (exceto #) é que o campo Objeto contenha um atributo. Entretanto, para o operador #, ele pode ser indefinido (ver abaixo). Pesquisas por atributo usando o operador "#" pode ter diferentes resultados dependendo da propriedade [#title id="3200" anchor="2287953"/] estar ou não marcada para o campo objeto: Propriedade Map NULL values to blank values marcada (opção padrão, recomendada na maioria dos casos).Neste caso, o operador "#" deveria ser visto como selecionando registros onde o campo "no attribute" contém o valor pesquisado. Neste contexto, 4D considera-o de uma maneira similar:
QUERY BY ATTRIBUTE([People];[People]Animals;"dog.name";#;"Rex") Outro exemplo: essa pesquisa retorna todos os registros para os quais [Table]ObjectField contém um objeto o qual possui um atributo attribute1 que é em si mesmo um objeto contendo um atributo attribute2 cujo valor não é value, assim como registros onde o campo objeto não contém attribute1 ou attribute2): QUERY BY ATTRIBUTE([Table] ;[Table]ObjectField ;"attribute1.attribute2";#;value) Este princípio também se aplica aos atributos de array. Por exemplo: QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations[].city";#;"paris") Esta pesquisa retornará registros para pessoas que não tem um endereço em Paris. Para especificamente obter registros onde o atributo não é definido, pode usar um objeto vazio (ver exemplo 2). Map NULL values to blank values propriedade desmarcada (modo "SQL"). QUERY BY ATTRIBUTE([People];[People]Animals;"dog.name";#;"Rex") Esta operação, mais similar à lógica SQL, é reservada para necessidades específicas Aqui estão as regras a serem seguidas para a construção de várias pesquisas por atributo:
Nota: Cada tabela mantém sua própria construção de pesquisa atual. Isto significa que você pode criar várias consultas simultaneamente, um para cada tabela. Não importa a forma em que a pesquisa foi definida:
As datas são armazenadas nos objectos com base nos parâmetros do banco de dados e; por padrão, se considera o fuso horário (veja selector JSON use local time no comando SET DATABASE PARAMETER). !1973-05-22!"></span></span><span id="result_box" lang="pt"><span title="[#codeJS]!1973-05-22!">[#codeJS]!1973-05-22! -> "1973-05-21T23:00:00.000Z" QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Birthday";=;!1973-05-22!) Se você não quiser usar o parâmetro GMT, você pode modificar esses parâmetros com a seguinte declaração:
Lembnre que o escopo deste parâmetro é limitado ao process.. Se você executar este comando, 01 de outubro de 1965 se armazenará como "1965-10-01T00: 00: 00.000Z", mas você deve definir o mesmo parâmetro antes de iniciar suas pesquisas: SET DATABASE PARAMETER(JSON use local time;0) Pode usar a propriedade virtual "comprimento" com este comando. Esta propriedade está disponível automaticamente para qualquer atributo do tipo array e retorna o tamanho do array, ou seja, o número de elementos que o array contém. Pode ser usado no contexto de execução do comando QUERY BY ATTRIBUTE (veja exemplo 4). Neste exemplo, o atributo de "age" (idade) é uma string ou um inteiro e queremos encontrar pessoas cujas idades estão entre 20 e 29. As primeiras duas linhas procuram o atributo como um número inteiro (> = 20 e <30) e as última consultam o campo como uma string (começando com "2", mas é diferente de "2".) QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"age";>=;20;*) O comando QUERY BY ATTRIBUTE pode ser usado para encontrar registros nos quais alguns atributos são definidos (ou não). Para isso, deve usar um objeto vazio. //Pesquisar os registros onde o correio eletrônico é definida no campo objeto //Pesquisar os registros onde o CEP- código postal não está definido no campo objeto Nota: Essa sintaxe específica não é ocmpatível com atributos do tipo array. Pesquisar por valores NULL em elementos array dá resultados inválidos. Você quer encontrar um campo que contém os atributos do array. Com os dois registros a seguir: { "name":"martin", "locations" : [ { "kind":"office", "city":"paris" } ] } , { "name":"smith", "locations" : [ { "kind":"home", "city":"lyon" } , { "kind":"office", "city":"paris" } ] } ... QUERY BY ATTRIBUTE encontra pessoas com uma localização "paris" usando este comando: //indica o atributo array com a sintaxe ".[]" Nota: Se você tiver definido diversos critérios no mesmo atributo array, os critérios coincidentes não se aplicam necessariamente ao mesmo elemento do array. No exemplo a seguir, a pesquisa retornará "smith", porque tem um elemento "locations" cujo "kind" (tipo) é "home" e um elemento "locations", cujas "city" é "paris" Mesmo se esse não for o mesmo elemento: QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].kind";=;"home";*) Este exemplo ilustra o uso da propriedade virtual "comprimento". Seu banco de dados tem um campo de objeto [Customer]full_Data com os dados abaixo: Se quiser obter os registros para qualquer cliente que tenha duas ou mais crianças, pode escrever: QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) Se a pesquisa é realizada corretamente, a variável sistema OK toma o valor 1.
Ver também
Estrutura dos objetos de linguagem 4D
|
PROPRIEDADES
Produto: 4D HISTÓRIA
Criado por: 4D v15 ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||