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

    numero vs stringa MYSQL

    salve
    ho un elenco di dati estratti da una tabella
    può essere selezionato più di una voce.
    Fatta la selezione c'è un invio che archivia la serie delle voci scelte come stringa (ex "1,3,6,9"), in un'altra tabella come nuovo record.

    Quando estraggo il record nuovo vorrei anche reperire le caratteristiche collegate ad ogni elemento scelto (ex "1,3,6,9" -> ogni numero corrisponde alla chiave primaria dell'elemento scelto)
    Purtroppo essendo una stringa nn mi riesce di fare una cosa simile


    LEFT JOIN az_disponibilita as di ON di.id_disponibilita IN (a.id_disponibilita)
    ossia
    LEFT JOIN az_disponibilita as di ON di.id_disponibilita IN ("1,3,6,9")

    ho provato a dare un casting ma mi fa un pappone di quella stringa...
    c'è una soluzione per poter visualizzare la stringa come dei valori numerici separati da virgola?

  2. #2
    Potresti esplodere la stringa 1,3,6,9 tramite la virgola e poi recuperare i dati singolarmente (credo sia quello che intendevi con recuperare i dati)

  3. #3
    si mi piacerebbe farla esplodere ... ma nn ho trovato funzioni simili su mysql (giusto quella di casting) e nn so se si possa fare con php all'interno di una query

  4. #4
    puoi farlo con php, ma all'esterno della query.

    http://it.php.net/manual/en/function.explode.php

  5. #5
    allora nn mi serve....l'operazione deve essere svolta per ogni records, quindi deve essere fatta nella query...
    e non vorrei mettermi a fare due query, una per un estrazione anticipata da esplodere e una per la ricerca

  6. #6
    mi dispiace ma non sò personalmente darti altre soluzioni lascio il campo ad altri (magari riescono ad aiutarti)

  7. #7
    grazie ugualmente

    Cmq non riesco a credere che si possano unire i dati in stringa ma nn si possa ridividerli

  8. #8
    Non so come risolvere il problema specifico, pero' suggerirei di rivedere la tabella in cui registri le voci scelte. E' buona norma non registrare valori multipli mescolati in un campo solo, ma inserire ogni valore in un record diverso. Questo da' una struttura logica migliore alla tabella, e facilita di molto operazioni come la tua oltre ad altre quali modifiche, cancellazioni o altri inserimenti.

  9. #9
    Originariamente inviato da k.b
    Non so come risolvere il problema specifico, pero' suggerirei di rivedere la tabella in cui registri le voci scelte. E' buona norma non registrare valori multipli mescolati in un campo solo, ma inserire ogni valore in un record diverso. Questo da' una struttura logica migliore alla tabella, e facilita di molto operazioni come la tua oltre ad altre quali modifiche, cancellazioni o altri inserimenti.
    Scusami, ma ti devo contraddire

    Non è sempre la cosa migliore creare un record per ogni campo perché ricordati che creare un record per ogni campo ha lo svantaggio di costringerti a JOINARE una tabella in più complicando il codice, le query, i possibili errori ed inoltre aumentanto i tempi di esecuzione della query perché mysql deve operare su un'altra tabella (con tutto quello che comporta a livello tecnico)

    Se hai la possibilità di usare le stored procedures, dai un occhio qua
    http://blog.fedecarg.com/2009/02/22/...ring-function/

    O ancora meglio potresti utilizzare la funzione FIND_IN_SET di mysql che ti permette di ricercare uno specifico elemento in un elenco, ovvero gli elementi separati da virgola
    http://dev.mysql.com/doc/refman/5.0/...on_find-in-set

  10. #10
    daniele, sono felice di essere contraddetto, non ho mai avuto tempo di studiare a fondo (my)sql quindi mi fa sempre piacere imparare cose nuove su questa materia.

    Pero' nello specifico caso mi sembra che gia' si faccia una join di due tabelle, ed inoltre tu hai un campo "5,6,7,8", se successivamente decidi di eliminare la voce 7, la cosa non e' immediata come "DELETE FROM table WHERE voce = 7 AND <altracondizione>", no?

    Tra l'altro se non sbaglio questo approccio e' contrario alle regole di normalizzazione dei database (prima forma normale).

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.