Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    rinumerazione colonna 'ID'

    ciao a tutti

    ho un problema con una table in un db mySQL:

    la tabella contiene dei siti internet caratterizzati dai seguenti campi:

    ID, titolo, indirizzo, eccettera.....

    il campo ID è AUTO_INCREMENT

    In una pagina ho la neccessita di creare un elenco di una decina di siti in maniera casuale, riporto lo script semplificato (per un solo link generato casualmente):

    $num_rows = mysql_num_rows($results);
    $random1= mt_rand(1, $num_rows);
    $results = mysql_db_query("$database", "select * from sites where ID=$random1 ");


    tutto funziona correttamente se non fosse che la colonna 'ID' (AUTO_INCREMENT) non contiene valori continuativi, inseguito alla cancellazione di alcune righe (siti) dalla table....

    per questo problema se la funziona mt_random() genera un numero a qui non fa riferimento nessuna riga, il link non compare......

    per comodità sto cercando(sempre che esista) una funzione in grado di rinumerare regolarmente (1, 2, 3, 4, 5, ....) la colonna 'ID' della mia tabella.....
    Potrei togliere l'AUTO_INCREMENT dalla colonna, e ogni volta che viene inserita una riga (un sito) nella tabella, fargli calcolare il numero di righe presenti e inserire nel campo ID "num_righe+1" o qualcosa di simile.......ma preferirei sapere (ormai anche per curiosità personale) se esistesse una funzione che rinumeri la colonna!


    (credo che questo sia un problema comune a molti)

    grazie
    fmasca

  2. #2
    Usa la query...

    select * from tabella order by rand() limit 1


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

  3. #3
    usando
    $results = mysql_db_query("$database", "select * from sites order by rand() limit 5");

    il risultato non cambia....probabilmente gli sviluppatori del linguaggio hanno implementato la funzione rand() nello stesso modo in cui l'avevo creato io.....ovvero generando numeri casuali compresi tra 1 e il numero di righe della tabella........

    continuando la mia ricerca, ho trovato nella documentazione ufficiale questo:

    ----------------
    ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

    ORDER BY allows you to create the new table with the rows in a specific order. Note that the table does not remain in this order after inserts and deletes. This option is mainly useful when you know that you are mostly going to query the rows in a certain order; by using this option after big changes to the table, you might be able to get higher performance. In some cases, it might make sorting easier for MySQL if the table is in order by the column that you want to order it by later.
    ----------------------------

    secondo voi può funzionare in questo caso?????

    continuo a provare.....prima o poi......UP UP UP
    ciao!

  4. #4
    anche usando quello che ho appena postato nel post precerdente non cambia nulla.....
    ...pare che eliminare e ricreare la colonna ID di tanto in tanto, sia la miglior soluzione "provvisoria"

    se a qualcuno viene in mente qualcosa....
    ciao

  5. #5
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202
    avevo anche io + o - lo stesso problema.
    prova a vedere...
    http://forum.html.it/forum/showthrea...60#post8017860

  6. #6
    sei sicuro di non avere dei record vuoti, perché la select propesta da piero.mac deve funzionare.

    ciao

  7. #7
    la select di piero.mac dovrebbe essere corretta.....
    comunque visto che il rand() di mysql non è poi così casuale, puoi generarti un numero "un po' più casuale" dal php e fare qualcosa di simile (senza prendere in considerazione gli id della tabella):

    $results = mysql_db_query("$database", "select * from sites LIMIT ".$random1.",1 ");

  8. #8
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    202
    bè in effetti il rand() di Mysql su database piccoli tende il più delle volte a numeri alti...
    con una tabella da 5 righe su 10 chiamate mi è uscito per ben 4 volte il 5...

    con una tabella da 100 righe su 100 chiamate mi sono usciti per il 29% dei casi numeri superiori all'80

    Cmq rimane un'ottima soluzione e che funzione. Testata e garantita.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.