Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KabuqueJoe

Order By & Random

Recommended Posts

Com a seguinte tabela:

+-----------------+
|    NOTICIAS     |
+-----------------+
|       id        |
+-----------------+
|     titulo      |
+-----------------+
|     texto       |
+-----------------+
|      tipo       |
+-----------------+

Sabendo que existem três tipos de notícias (C,B,A), carregue as notícias do Database primeiro por ordem de tipo decrescente (C,B,A) e depois random, com as informações em paginação sem que nenhuma row se repita, como no exemplo abaixo:

|   Página 1:   |   Página 2:   |   Página 3:   |   Página 4:  |
|               |               |               |              |
| ID:03 TIPO: C | ID:02 TIPO: C | ID:06 TIPO: B | ID:11 TIPO:A |
| ID:01 TIPO: C | ID:08 TIPO: B | ID:07 TIPO: B | ID:09 TIPO:A |
| ID:04 TIPO: C | ID:05 TIPO: B | ID:10 TIPO: A |              |

Me tomou um tempo para conseguir fazer isso, eu fiz mas tenho uma boa quantidade de PHP, não sei se fiz da maneira mais fácil mas consegui! http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Alguem mais?

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste a forma como fez no php e a sintaxe sql.

 

fazer paginação com uma lista randômica sem repetir não é impossível, mas dependendo da quantidade de registros não é viável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz usando vetores, não ficou tão grande, só não apliquei paginação, agora é contigo.

Obs: podem ter quantos tipos forem (A, B, C, D, ...), ele agrupa da base de dados.

 

<?php
/*
Chame aqui o arquivo iniciando a conexão com base de dados...
*/

// Precisa criar essa função, o shuffle() e similares do PHP não embaralham E mantém as chaves do vetor ao mesmo tempo...
if(function_exists('mistura_chaves') === false) 
{ 
  function mistura_chaves(&$vetor) 
  { 
    $shuffle = array(); 
    $chaves = array_keys($vetor); 
    shuffle($chaves); 
    foreach($chaves as $chave) 
    { 
      $shuffle[$chave] = $vetor[$chave]; 
      unset($vetor[$chave]); 
    } 
    $vetor = $shuffle; 
  } 
} 

// Captura os tipos existentes...
$consulta = mysql_query("SELECT tipo FROM noticias GROUP BY tipo ORDER BY tipo DESC");
while($dado = mysql_fetch_array($consulta))
{
  $tipo = ($dado["tipo"]);
  $tipos[] = $tipo;
}

// Captura os resultados, para cada tipo (classe) capturado anteriormente, guarda em vetor com o id sendo key...
$resultado = mysql_num_rows($consulta = mysql_query("SELECT * FROM noticias"));
while($dado = mysql_fetch_array($consulta))
{
  $id = ($dado["id"]);
  $tipo = ($dado["tipo"]);
  foreach($tipos as $classe)
  {
    if($tipo == $classe)
    {
      $noticias[$classe][$id] = $tipo;
    }
  }
}

// Captura cada tipo (classe) e imprime os resultados após o shuffle...
foreach($tipos as $classe)
{
  mistura_chaves($noticias[$classe]);
  foreach($noticias[$classe] as $noticia => $chave)
  {
    $contador += 1;
    $nid = $noticia;
    $ntipo = $chave;
    echo("ID: $nid<br />TIPO: $ntipo<br />- - - - - -<br />");
  }
}
?>

Agora é só aplicar a paginação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Re-fiz a query... é MUIIIIITO mais simples do que eu tinha primeiramente feito. <_<

 

// $seed é um numero criado randomicamente em php para que as informações não se repitam.
// No site que fiz, coloquei o $seed em uma sessão, assim toda a vez que o usuário entrar no site ele vai ver as informações numa certa ordem até que a sessão queime.

$seed = rand();
$mysql = "SELECT * FROM noticias ORDER BY tipo DESC, RAND($seed) LIMIT 0,30";

 

Dai foi só aplicar a paginação!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Re-fiz a query... é MUIIIIITO mais simples do que eu tinha primeiramente feito. <_<

 

// $seed é um numero criado randomicamente em php para que as informações não se repitam.
// No site que fiz, coloquei o $seed em uma sessão, assim toda a vez que o usuário entrar no site ele vai ver as informações numa certa ordem até que a sessão queime.

$seed = rand();
$mysql = "SELECT * FROM noticias ORDER BY tipo DESC, RAND($seed) LIMIT 0,30";

 

Dai foi só aplicar a paginação!

 

Assim não serve?

$mysql = "SELECT * FROM noticias ORDER BY tipo DESC, RAND( NOW() ) LIMIT 0,30";

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Re-fiz a query... é MUIIIIITO mais simples do que eu tinha primeiramente feito. <_<

 

// $seed é um numero criado randomicamente em php para que as informações não se repitam.
// No site que fiz, coloquei o $seed em uma sessão, assim toda a vez que o usuário entrar no site ele vai ver as informações numa certa ordem até que a sessão queime.

$seed = rand();
$mysql = "SELECT * FROM noticias ORDER BY tipo DESC, RAND($seed) LIMIT 0,30";

 

Dai foi só aplicar a paginação!

 

Assim não serve?

$mysql = "SELECT * FROM noticias ORDER BY tipo DESC, RAND( NOW() ) LIMIT 0,30";

[]s

 

Ótima observação Gilton. Valeu! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.