4D v16.3QUERY BY ATTRIBUTE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY ATTRIBUTE
|
QUERY BY ATTRIBUTE ( {umaTabela}{;}{opConj ;} campoObjeto ; caminhoAtributo ; opPesq ; valor {; *} ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
umaTabela | Tabela |
![]() |
Tabela para a qual retornar uma seleção de registros, ou tabela padrão se for omitido | |||||
opConj | Operador |
![]() |
Operador de Conjunção para juntar múltiplas pesquisas | |||||
campoObjeto | Campo |
![]() |
Campo Objeto para atributos de pesquisa | |||||
caminhoAtributo | String |
![]() |
Nome ou caminho do atributo | |||||
opPesq | Operador, String |
![]() |
Operador pesquisa (comparador) | |||||
valor | Texto, Número, Data, Hora |
![]() |
Valor a comparar | |||||
* | Operador |
![]() |
Continua a flag de pesquisa | |||||
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.
Nota: Para mais informações sobre os campos Objeto (novos em 4D v15) , por favor, veja no manual de Refência de Design.
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:Conjunção | Símbolo a utilizar com QUERY BY ATTRIBUTE |
AND | & |
OR | | |
Except | # |
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:
Comparação | Símbolo a utilizar com QUERY BY ATTRIBUTE |
Igual a | = |
Diferente de | # |
Menor que | < |
Maior que | > |
Menor ou igual a | <= |
Maior ou igual a | >= |
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). 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").
Neste caso, atributos indefinidos (atributos não presentes neste campo ou cujos valores for Null) não são considerados como equivalente aos valores em branco como padrão. Como resultado, pesquisas do tipo "atributo A é diferente de atributo B" não vai retornar registros onde o atributo A for indefinido.
Para usar o mesmo exemplo que acima, quando a opção Map NULL values to blank values não estiver marcada para o campo [People]Animals field, a persquisa abaixo vai retornar apenas registros para pessoas que tenham um cachorro cujo atributo "name" não contiver "Rex". Registros para pessoas que não tem um cachorro, ou que tem um cachorro sem nome não vão ser retornados neste caso.
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"
Essa configuração também é considerada durante a busca, assim você não precisa se preocupar com isso, se você usar sempre a sua base no mesmo lugar e se os parâmetros são os mesmos em todos os computadores que acessam os dados. Neste caso, a seguinte busca retorna corretamente os registros cujo atributo é Birthday igual a !1973-05-22! (Salvo como"1973-05-21T23:00:00.00Z"):
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:
SET DATABASE PARAMETER(JSON use local time;0)
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)
QUERY BY ATTRIBUTE([Persons];[Persons]OB_Info;"Birthday";=;!1976-11-27!)
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;*)
QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"age";<;30;*)
QUERY BY ATTRIBUTE([Persons];|;[Persons]OB_Info;"age";=;"2@";*)
QUERY BY ATTRIBUTE([Persons]; & ;[Persons]OB_Info;"age";#;"2") //sem * para lançar a execução
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
C_OBJECT($undefined)
QUERY BY ATTRIBUTE([Persons];[Persons]Info;"email";#;$undefined)
//Pesquisar os registros onde o CEP- código postal não está definido no campo objeto
C_OBJECT($undefined)
QUERY BY ATTRIBUTE([Persons];[Persons]Info;"zip code";=;$undefined)
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 ".[]"
QUERY BY ATTRIBUTE([People];[People]OB_Field;"locations.[].city";=;"paris")
//Seleciona "martin"e "smith"
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";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field;"locations.[].city";=;"paris")
//Selecciona "smith"
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.
A variável Ok toma o valor 0 se:
Estrutura dos objetos de linguagem 4D
QUERY SELECTION BY ATTRIBUTE
Produto: 4D
Tema: Pesquisas
Número
1331
Criado por: 4D v15
Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)