Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Limit nella query e record doppi

    Ciao a tutti,
    vado dritto al problema.

    ho la seguente tabella tab1

    id | uid | ref |
    1 | pippo | pluto |
    2 | pippo | minni !
    3 | pippo | orazio !
    4 | pippo | paperino !
    5 | pluto | qui |
    6 | pluto | quo |
    7 | pluto | qua |
    8 | minni | brigitta |
    9 | minni | battista |
    Mettiamo che minni voglia impadronirsi di 10 persone che siano diverse da brigitta e battista, visto che le appartengono di già.
    Quindi può impadronirsi di pluto, orazio, paperino, qui, quo e qua, senza però che vengano rimossi dai legittimi propretari.
    Ora....come si può ben capire non ci sono 10 persone, ma solo 6 persone di cui si può impadronire....lo faccio apposta....perchè è qui che ho il problema...

    Ecco quindi il risultato che dovrei ottenere:

    id | uid | ref |
    1 | pippo | pluto |
    2 | pippo | minni !
    3 | pippo | orazio !
    4 | pippo | paperino !
    5 | pluto | qui |
    6 | pluto | quo |
    7 | pluto | qua |
    8 | minni | brigitta |
    9 | minni | battista |
    10 | minni | pluto |
    11 | minni | orazio |
    12 | minni | paperino |
    13 | minni | qui |
    14 | minni | quo |
    15 | minni | qua |
    Ecco....posto le query...


    // Estraggo tutti i personaggi già appartenenti a minni ( ovvero brigitta e battista )
    $query = mysql_query("SELECT * FROM tab1 WHERE uid='minni' GROUP BY ref ");
    while($result=mysql_fetch_array($query))
    {
    $ref = $result['ref];
    }

    // Cerco 10 personaggi nella colonna ref diversi da 'se stessi' (ovvero minni) escludendo anche quelli della precedente query (ovvero brigitta e battista).
    $queryb = mysql_query("SELECT * FROM tab1 WHERE ref!='$ref' AND ref!='minni' limit 10");
    while($resultb=mysql_fetch_array($queryb))
    {
    $risultato= $resultb['ref'];

    // Inserisco nella tabella i 10 personaggi
    $query_finale = "INSERT INTO tab1 (uid, ref) VALUES('minni','$risultato')";

    }

    Bene.....è due giorni che ci sbatto...e non riesco a risolvere....anche se minni può impadronirsi solamente di 6 personaggi, e non di 10( come da query ) la query me ne assegna 10, di cui 4 sono doppioni...

    quindi un risultato simile

    id | uid | ref |
    1 | pippo | pluto |
    2 | pippo | minni !
    3 | pippo | orazio !
    4 | pippo | paperino !
    5 | pluto | qui |
    6 | pluto | quo |
    7 | pluto | qua |
    8 | minni | brigitta |
    9 | minni | battista |
    10 | minni | pluto |
    11 | minni | orazio |
    12 | minni | paperino |
    13 | minni | qui |
    14 | minni | quo |
    15 | minni | qua |
    16 | minni | paperino |
    17 | minni | paperino |
    18 | minni | qui |
    19 | minni | quo |

    ...che non va bene in quanto ci sono doppioni....

    Come fare per evitare tutto ciò?
    Ovvero evitare che la query inserisca doppioni se il limit è impostato a 10 e i personaggi che si può impradonire minni sono solo 6?
    Ho provato con miriadi di soluzioni, dal semplicissimo DISTINCT(ref) ad altre istruzioni....


    Spero in un vostro aiuto.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    vediamo se ho capito...
    questa query
    $queryb = mysql_query("SELECT * FROM tab1 WHERE ref!='$ref' AND ref!='minni' limit 10");

    nel caso specifico che spiegavi prima, quanti record pesca??

  3. #3
    ne pesca 10 visto che il limit è impostato a 10.
    questo il risultato dell'esempio con record doppi....

    10 | minni | pluto |
    11 | minni | orazio |
    12 | minni | paperino |
    13 | minni | qui |
    14 | minni | quo |
    15 | minni | qua |
    16 | minni | paperino | già presente
    17 | minni | paperino | già presente
    18 | minni | qui | già presente
    19 | minni | quo | già presente
    questo il risultato dell'esempio che vorrei....

    10 | minni | pluto |
    11 | minni | orazio |
    12 | minni | paperino |
    13 | minni | qui |
    14 | minni | quo |
    15 | minni | qua |
    se imposto il limit a 1,2,3,4,5,6 va tutto bene....ma da 6 in sù comincia a mettere doppi records(logico), visto che minni può solo impadronirsi di 6 persone diverse...

    praticamente devo fare in modo che anche se il limit è impostato a 10, in questo caso me ne inserisca 6 soltanto, evitando quindi di mettere doppioni.

  4. #4
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    scuasa ma non capisco questa cosa: nel tuo esempio, la tabella ha tre campi : id, uid,ref ma allora perche scrivi

    SELECT * FROM tab1 WHERE ref!='$ref' AND ref!='minni' limit 10

    e in particolare ref!='minni' ?!?

    dovrebbe essere SELECT * FROM tab1 WHERE ref!='$ref' AND uid!='minni' limit 10

    o no?

  5. #5
    ref!='minni' perchè non può impadronirsi di se stessa, quindi la escludo a priori...altrimenti uscirebbe un record del genere

    id | uid | ref |
    20 | minni | minni |


    ho giusto aggiunto uid!='minni' ma in ogni caso continua ad crearmi doppi record....
    praticamente se eseguo la query 10 volte mi ritrovo 100 paperino, 100 qui, 100 quo e così via...invece non dovrebbe più creare nuovi records in quanto si è già impadronita dei personaggi...

    non vorrei avessi sbagliato i cicli while o altro....

  6. #6
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    prova a fare cosi

    Codice PHP:
    $num ;
    $query mysql_query("SELECT * FROM tab1 WHERE uid='minni' GROUP BY ref ");
    while(
    $result=mysql_fetch_array($query)){
    $ref[$num] = $result['ref];
    ++$num;
    }

    // Cerco 10 personaggi nella colonna ref diversi da '
    se stessi' (ovvero minni) escludendo anche quelli della precedente query (ovvero brigitta e battista).
    for ( $i = 0 ; $i <= count($ref); ++$i){
    $queryb = mysql_query("SELECT * FROM tab1 WHERE ref!='
    $ref[$i]' AND ref!='minni' limit 10"); 
    while($resultb=mysql_fetch_array($queryb)){
    $risultato= $resultb['
    ref'];

    // Inserisco nella tabella i 10 personaggi
    $query_finale = "INSERT INTO tab1 (uid, ref) VALUES('
    minni','$risultato')";

    }

    cosi è migliorata la situazione?

  7. #7
    mi dà errore qui:

    $queryb = mysql_query("SELECT * FROM tab1 WHERE ref!='$ref[$i]' AND ref!='minni' limit 10");

  8. #8
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    prova cosi:

    $queryb = mysql_query("SELECT * FROM tab1 WHERE ref!='" . $ref[$i] . "' AND ref!='minni' limit 10");

    comunque fatti stampare $queryb

    echo $queryb

  9. #9
    mi dà roba strana...

    Resource id #4
    Resource id #5
    Resource id #6
    Resource id #6

  10. #10
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    dove da l'errore? nell'insert?
    stampa a video cos'ha creato in $query_finale
    echo $query_finale ;

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.