Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Order che non ordina

  1. #1

    Order che non ordina

    codice:
    //Variabile GET
    $News = trim($_GET['News']);
    
    //Prima query
    $query = "SELECT * FROM Correlate WHERE News1 = '$News' OR News2 = '$News'";
    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($result)) {
    $id1 = $row["ID"];
    $n1 = $row["News1"];
    $n2 = $row["News2"];
    
    //Seconda query
    $query2 = "SELECT * FROM News WHERE (ID = '$n1' OR ID = '$n2') AND ID != $News AND Data <= Now() ORDER BY Data DESC";
    $result2 = mysql_query($query2, $db);
    while ($row2 = mysql_fetch_array($result2)) {
    $id2 = $row2["ID"];
    $tit = $row2["Titolo"];
    
    echo "<a href=\"pag.php?Pag=news&News=$id2\" title=\"$tit\">$tit</a>
    
    ";
    
    }
    }
    In pritica in base ai valori della prima query che ad es. può essere $n1=1 $n2=10, $n1=1 $n2=25, vado a pescare i titoli nella seconda query, ma ovviamente me li ordina in base alla prima e non con l'ORDER BY della seconda.
    Come posso fare? Grazie

  2. #2
    Prima di rispondere... come e' formata la data che vorresti ordinare?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    aaaa-mm-gg hh:mm:ss

  4. #4
    Originariamente inviato da poeta1978
    aaaa-mm-gg hh:mm:ss
    La seconda query estrae un solo record per volta essendo annidata nel while della prima. Quindi non ha nulla da ordinare, segue semplicemente l'ordinamento generato dalla prima SELECT.

    Possono essere diverse le soluzioni. la prima che mi viene potrebbe essere di usare la seconda query SELECT per popolare una tabella temporanea da cui poi fare l'ordinamento voluto. Un'altra sarebbe di raccogliere tutti i records in un array e poi ordinare l'array...

    Avendo un campo in comune si potrebbe ipotizzare un JOIN, ma hai troppi OR e non conosco la struttura delle tabelle. Gli OR in una JOIN possono portare a risultati cartesiani.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    codice:
    //Variabile GET
    $News = trim($_GET['News']);
    
    //Prima query
    $query = "SELECT * FROM Correlate WHERE News1 = '$News' OR News2 = '$News'";
    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($result)) {
    $id1 = $row["ID"];
    $n1 = $row["News1"];
    $n2 = $row["News2"];
    $na[] = $n1;
    $nb[] = $n2;
    }
    
    //Seconda query
    $query2 = "SELECT * FROM News WHERE (ID = '$na' OR ID = '$nb') AND ID != $News AND Data <= Now() ORDER BY Data DESC";
    $result2 = mysql_query($query2, $db);
    while ($row2 = mysql_fetch_array($result2)) {
    $id2 = $row2["ID"];
    $tit = $row2["Titolo"];
    
    echo "<a href=\"pag.php?Pag=news&News=$id2\" title=\"$tit\">$tit</a>
    
    ";
    
    }
    Non va

  6. #6
    intendevo qualcosa di questo genere....
    codice:
    //Prima query
    $query = "SELECT * FROM Correlate 
              WHERE News1 = '$News' OR News2 = '$News'";
    $result = mysql_query($query, $db);
    
    while ($row = mysql_fetch_array($result)) {
          $id1 = $row["ID"];
          $n1 = $row["News1"];
          $n2 = $row["News2"];
    
          $query2 = "CREATE TEMPORARY TABLE IF NOT EXISTS temp
                     SELECT * FROM News 
                     WHERE (ID = '$n1' OR ID = '$n2') 
    	         AND ID != '$News' 
    		 AND Data <= Now()" ;
              
          $result2 = mysql_query($query2, $db);
    
    }
    
    $query3 = "SELECT * FROM temp
               ORDER BY Data DESC";
    
    $result3 = mysql_query($query3, $db);           
    
    while ($row2 = mysql_fetch_array($result3))  {
      
           $id2 = $row2["ID"];
           $tit = $row2["Titolo"];
    
    echo "<a href=\"pag.php?Pag=news&News=$id2\" title=\"$tit\">$tit</a>
          
    
    ";
    
    }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    occhio che e' un esempio....

    rivedendo ... dovresti sostituire create con insert per le selezioni successive alla prima. Quindi andrebbe strutturato un attimo diversamente:
    codice:
    //Prima query
    $query = "SELECT * FROM Correlate 
              WHERE News1 = '$News' OR News2 = '$News'";
    $result = mysql_query($query, $db);
    
    if(mysql_num_rows > 0 ) {
    $row = mysql_fetch_array($result)) {
    $id1 = $row["ID"];
    $n1 = $row["News1"];
    $n2 = $row["News2"];
    
          $query2 = "CREATE TEMPORARY TABLE IF NOT EXISTS temp
                     SELECT * FROM News 
                     WHERE (ID = '$n1' OR ID = '$n2') 
    	         AND ID != '$News' 
    		 AND Data <= Now()" ;
    }
    
    if(mysql_num_rows > 1 ) {
    while ($row = mysql_fetch_array($result)) {
          $id1 = $row["ID"];
          $n1 = $row["News1"];
          $n2 = $row["News2"];
    
          $query2 = "INSERT INTO TEMPORARY TABLE temp
                     SELECT * FROM News 
                     WHERE (ID = '$n1' OR ID = '$n2') 
    	         AND ID != '$News' 
    		 AND Data <= Now()" ;
              
          $result2 = mysql_query($query2, $db);
    
     } // end while
    } // end if
    il resto uguale a sopra.... occhio che ho scritto qui e quindi rimane da debuggare....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.