Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou a dias tentando resolver esta clausula alguem poderia me ajudar
preciso que lista 12 registro aleatorios sem repeti-los (banco access)
então fiz assim funciona uma beleza mais repete:
PESQUISAR="SELECT TOP 12 FROM tabela order by Rnd(Int(Now()[iD])-Now()*[iD]) "
entao fiz assim, funciona mais não dá aleatorio:
PESQUISAR="SELECT distinct TOP 8 * FROM tabela "
o distinct não roda com order by
alguem teria uma sugestão.
muito obrigado mesmo
Luciano
Bom dia,
Eu acho que essa query vai ficar melhor assim com o group by.
Eu fiz o select direto no banco de dados e estou postando aqui
select * from tabela group by nome_coluna order by nome_coluna desc
Espero ter ajudado.
Olá Gilberto agradeço sua ajuda, fiz como você falou mais ainda repete registro
tenho um banco access
id (auto numeracao)
titulo (texto)
descricao (memorando)
num (numerico)
precisava listar 12 registros aleatorios sem repetir o titulo
por favor me de uma luz
fazem dias que estou me matando aqui
tentei fazer assim:
PESQUISAR1 = "select top 12 from produtos order by Rnd(Int(Now()[num])-Now()*[num]); "
mais repete o titulo
muito obrigado mesmo
Luciano
>
Bom dia,
Eu acho que essa query vai ficar melhor assim com o group by.
Eu fiz o select direto no banco de dados e estou postando aqui
select * from tabela group by nome_coluna order by nome_coluna desc
Espero ter ajudado.
Bom dia.
Se esta repedindo coisa igual é pq tem coisa diferente na coluna que você esta usando como group by. O que não tiver igual ele não ira repetir.
Faz o teste direto no seu banco de dados pra você ver.
No seu select que você fez
PESQUISAR1 = "select top 12 * from produtos order by Rnd(Int(Now()*[num])-Now()*[num]); "
ele não esta sendo agrupado por isso que vai repetir tudo mesmo.olha esta parte do code que uso para nao repetir.
RANDOM com registros de um banco de dados sem repetição.
<%
' Gravamos o Recordset em um Array Bidimensional
Set strRS = Server.CreateObject("ADODB.RecordSet")
strRS.Open "SELECT * FROM membros ", strConexao, 3, 3
arySub = strRS.getRows()
' Fechamos a conexão pois não usaremos mais
strRS.Close
Set strRS = Nothing
strConexao.Close
Set strConexao = Nothing
Dim TotalReg, TotalNum, vran, x, encontrou, arrGerados(0)
Dim Numreg, verGerado, var_arrGerados, xLoop
Function GeraRegistros(TotalNum)
TotalReg=Cint(uBound(arySub,2)) ' Encontramos o Maior Array Gerado
vran = 1
For x = 0 To TotalNum-1 ' LOOP de 1 p/ Total solicitado
encontrou = 1
Randomize() ' Geramos o primeiro Random
NumReg = Cint((rnd*TotalReg))
verGerado = Split(var_arrGerados,",") ' Verifica se nº gerado
For xLoop = LBound(verGerado) To UBound(verGerado)
IF Trim(verGerado(xLoop)) = Trim(NumReg) Then
'Este "response" comentado abaixo, indica qual número se repetiram
'E não armazena no Array único, fazendo gerando um novo Random
'response.write "<b>[ "& verGerado(xLoop) &","& NumReg &" ]</b><br> "
x = x - 1
encontrou = 2
Exit For
End IF
Next
IF encontrou = 1 Then ' NÃO ENCONTROU, gera o próximo número
IF vran = 1 Then ' primeiro (Verificar este trecho)
arrGerados(0) = NumReg
vran = 2
Else
arrGerados(0) = arrGerados(0) &","& NumReg
End IF
var_arrGerados = Join(arrGerados)
End IF
Next
GeraRegistros = var_arrGerados
End Function
' Array gerado, podemos iniciar a formatação de perguntas
number = GeraRegistros(3)
verNum = Split(number, ",")
For x = LBound(verNum) to UBound(verNum)
response.write arySub(0,verNum(x)) &"."
response.write arySub(1,verNum(x)) &"<br>"
Next
%>
ou arrumar seu RND do SQL
Se eu entendi bem, tente criar um outro critério de ordenação; ex:
select titulo from tabela
group by titulo
order by rnd(count(titulo));
tente com o DISTINCTROW
resolveu essa questão?
esta gerando algum erro ?
e tente assim:
SELECT distinct ID TOP 12 FROM tabela order by Rnd(Int(Now()[iD])-Now()[iD])
caso de conflito mude o distinct para DISTINCTROW
select DISTINCTROW campo from tabela order by id asc
DISTINCTROW - Omite dados com base em registros inteiros duplicados e não apenas campos duplicados. Por exemplo, você pode criar uma consulta que associe as tabelas Customers e Orders no campo CustomerID. A tabela Customers não possui campos CustomerID duplicados, mas a tabela Orders possui, pois cada cliente pode ter muitos pedidos. A instrução SQL a seguir mostra como você pode usar o DISTINCTROW para criar uma lista de empresas que têm pelo menos um pedido mas sem fornecer quaisquer detalhes sobre esses pedidos:
SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;
Se você omitir DISTINCTROW, essa consulta criará várias linhas para cada empresa que tiver mais de um pedido.
DISTINCTROW entra em vigor somente quando você seleciona campos de algumas, mas não de todas, as tabelas usadas na consulta. DISTINCTROW será ignorado se a sua consulta incluir apenas uma tabela ou se você retirar campos de todas as tabelas.