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

    Select multipla su stesso valore

    Salve, ho una pagina da cui recupero un valore tramite GET, tramite questo valore estraggo tutta la riga con una semplice query, tuttavia poniamo che il valore preso da GET sia 'valore1', visto che 'valore1' è una chiave univoca può essercene soltanto 1, però ad esempio se ci spostiamo dal campo valore a quello nome, notiamo che possono esserci due nomi uguali ad esempio nel campo nome possone esserci due nomi 'prova'. Io vorrei prima selezionar ela riga, e poi prende dalla riga in questione il campo nome e poi far selezionare di nuovo tutti gli elementi con lo stesso nome per copiarli in un'altra tabella e poi cancellarli dalla prima.
    Al momento ho fatto questo codice:
    codice:

    codice:
    "INSERT tabella1 (nome) SELECT nome FROM tabella2 WHERE valore = '$valore1'";

    Il problema è che non riesco a capire come devo fare per rifare la Select con quel valore specifico del campo 'nome'. Una volta che seleziono la riga poi come faccio? Esiste un comando tipo SELECT ALL o simili?
    Grazie in anticipo!!

  2. #2
    Mi sembra contorto il ragionamento, ma forse son troppo assonnato io

    Tu vuoi selezionare una serie di voci da db.
    Poi vuoi aggiungerli in un altra tabella.
    Poi vuoi cancellare gli elementi dalla tabella originale.

    Ho dimenticato qualcosa?

  3. #3
    Non propio così, spiego con una lista come hai scritto tu:
    1)la pagina ha sempre almeno un dato, ad esempio chiave che corrisponde solo a un record(può corrispondere solo a un record perchè o prendo l'id, già messo con auto increment nel database, o un codice generato di tipo sha1);
    2)con la query che ho postato riesco a selezionare questo record ed eventualmente a stamparne i risultati, però solo di quel record;
    3)Entrambe le tabelle già esistono e sono contenute nello stesso database;
    4)vorrei una volta selezionato il record in questione tirare fuori i dati, ad esempio nome e poi selezionare anche tutti gli altri record con lo stesso nome;
    5)Non l'ho specificato, ma poi ovviamente cancello gli elementi della tabella originale, sempre filtrandoli per nome.

    Comunque i tre punti enunciati da te erano esatti, qui ho solo specificato.


  4. #4
    se hai gli stessi campi non potresti provare con una union? è un ipotesi eh

  5. #5
    Originariamente inviato da _Marco_87
    Non propio così, spiego con una lista come hai scritto tu:
    1)la pagina ha sempre almeno un dato, ad esempio chiave che corrisponde solo a un record(può corrispondere solo a un record perchè o prendo l'id, già messo con auto increment nel database, o un codice generato di tipo sha1);
    2)con la query che ho postato riesco a selezionare questo record ed eventualmente a stamparne i risultati, però solo di quel record;
    3)Entrambe le tabelle già esistono e sono contenute nello stesso database;
    4)vorrei una volta selezionato il record in questione tirare fuori i dati, ad esempio nome e poi selezionare anche tutti gli altri record con lo stesso nome;
    5)Non l'ho specificato, ma poi ovviamente cancello gli elementi della tabella originale, sempre filtrandoli per nome.

    Comunque i tre punti enunciati da te erano esatti, qui ho solo specificato.

    per il punto 4 è possibile che tu debba fare una query separata.

  6. #6
    Sono andato a vedere cos'è la union (ammetto che non la conoscevo), da quel che ho capito mi permette una doppia query, scarta i risultati doppi in automatico, ma non è quello che cercavo, perchè non devo fare due operazioni distinte, ma in pratica probabilmente dovrei usare una subquery per questo problema.
    Forse tipo questa, ma è sbagliata.......
    codice:
      mysql_query("SELECT * FROM tabella2 WHERE valore = '$valore1'(INSERT INTO tabella1 (nome) SELECT nome FROM tabella2 WHERE tabella2.valore = tabella2.'$valore1') )");

  7. #7
    Originariamente inviato da raven74
    magari non ho capito niente, ma qualcosa tipo questo?

    codice:
    SELECT * FROM tabella 2 WHERE nome IN (SELECT nome FROM tabella2 WHERE valore = '$valore1')
    Non propio, perchè in questo modo perdo i riferimenti, comunque ho provato a dividere la query in due parti (che poi diventeranno tre per la fase di cancellazione dalla tabella2). Riesco a prendere i dati dalla tabella 2 ma non riesco a passarli alla tabella1, che crea solo righe vuote. Visto che le sintassi sono esatte, manca ovviamente qualcosa. Ho provato con GET, POST, my_sql_real_escape_string, ecc(provo un pò tutto per vedere se prima o poi il comando magari passa).
    Il problema è che non riesco a prendere il dato, neanche per una semplice stampa.
    Ho provato a farlo solo su una riga:
    codice:
     mysql_query("INSERT INTO tabella1 SET nome = '$nome'")
    Visto che il dato, per varie prove viene già passato con un comando Uptade e un Select non sò che altro scrivere per validare $nome, perchè GET,POST, ecc non funzionano.

  8. #8
    Fatto, così funziona e fà quello che chiedo. Ha solo 2 pecche: la prima è che devo scrivere 3 query per farla funzionare, più la quarta di DELETE.. , la seconda è che mi aggiunge solo il primo record che vede, ignorando gli altri due(ne ho creati 3 che corrispondono a questecaratteristiche). Sapete dirmi perchè?
    Codice PHP:
    $safe '2';
    //1
    $query "SELECT nome FROM verifica WHERE numero LIKE $safe";
    $res mysql_query($query);
    $array mysql_fetch_array($res);
    $arrnome $array['nomel'];
    $arrnome2 "'%".mysql_escape_string($array['nome']). "%'";

    //2
    $query2 "SELECT nome,nome2 FROM verifica WHERE nome LIKE $arrnome2";
    $res2 mysql_query($query2);
    $arr mysql_fetch_array($res2);
    $nome $arr['nome'];
    $nome2 $arr['nome2'];

    //3
    $query3 "INSERT INTO commenti (nome,nome2) VALUES ('$nome','$nome2')";
    $res3 mysql_query($query3); 

  9. #9
    Risolto così:
    Codice PHP:
    $safe '2';
    //1
    $query "SELECT nome FROM tabella2 WHERE numero LIKE $safe";
    $res mysql_query($query);
    $array mysql_fetch_array($res);
    $nome $array['nome'];
    $nome2 "'%".mysql_escape_string($array['nome']). "%'";

    //2
    $query2 "INSERT INTO tabella1 (nome,nome2) SELECT nome,nome2 FROM(SELECT DISTINCT nome,nome2 FROM tabella2 WHERE nome LIKE $nome2) x";
    $res2 mysql_query($query2); 
    Se avete idee migliori, codici più snelli, ecc, scrivete pure. .

    P.S. non ho capito la x (trovato su una guida in inglese di mysql) alla fine di query2 a cosa serva, ma se la tolgo non funziona: qualcuno me lo spiega?

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.