Strana SQL ... in preda al panico!

Ciao a tutti,

+-------------------+-----------------+
| id                | codici    
+-------------------+-----------------+
|                 6 | 1;2;            
|                 8 | 1;12;3;          
|                11 | 12;2;22;       

sapete per caso come è possibile recuperare da questa tabella i records con codice 2?

Grazie

Ulisse  :bye:

inviato 10 anni fa
ulisse
X 0 X

Premetto che quella tabella è progettata male. Ed infatti la query di cui hai bisogno è necessariamente questa:

SELECT id FROM tabella WHERE codici LIKE '%;2;%'

Per effettuare questa query MySQL deve leggere tutte le righe della tabella. Se sono poche OK, altrimenti ...

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni scusa il ritardo, so che la tabella non è delle migliori ma purtroppo me l'hanno data così! Quella query l'avevo già provata ma con insuccesso perché esistono anche i casi in cui il numero non viene preceduto da un punto e virgola. Come ad esempio:

+-------------------+-----------------+
| id                | codici    
+-------------------+-----------------+
|                 6 | 2;12;            
|                 8 | 2;12;3;          
|                11 | 22;2;12;   

 :bye:

risposto 10 anni fa
ulisse
X 0 X

Prova allora così:

SELECT id FROM tabella WHERE codici REGEXP '^2;|;2;|;2$'

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie mille Gianni, sono proprio una frana nell'espressioni regolari.

Volevo sapere se era possibile usare la stessa funzionalità con preg_replace. Io ci ho provato ma mi cancella anche i punti e virgola degli elementi interni intendo: 22;2;12; --> ;2; e quindi il risultato è 2212; che logicamente è errato.

Mi puoi aiutare per favore?  :bye:

risposto 10 anni fa
ulisse
X 0 X

dimmi esattamente cosa vuoi sostituire e con cosa.

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Vorrei cancellare dalla stringa 2; considerando che la stringa potrebbe essere del genere: 22;2;12; oppure 11;1;111;

In sintesi devo prendere il numero + il punto e virgola.

Grazie e buona partita per domani!

 :bye:

risposto 10 anni fa
ulisse
X 0 X

siccome mi hai parlato di preg_replace ne deduco che stavolta possiamo lavorare con le funzioni PHP. In questo contento potresti fare una explode per ottenenre un array con i soli numeri e poi cancellare il numero indesiderato dall'array. Per ricomporre la stringa invece puoi usare un implode

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie mille! Ci provo e ti faccio sapere

risposto 10 anni fa
ulisse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda