prova a dare un’occhiata qui
https://stackoverflow.com/questions/...tring-in-mysql
prova a dare un’occhiata qui
https://stackoverflow.com/questions/...tring-in-mysql
La mia prima prova è stata fatta proprio con SUBSTRING_INDEX. Ho abbandonato perché troppo macchinoso per rimpiazzare il primo elemento.
Se si sapesse il numero massimo degli elementi e se questo numero non fosse grande si potrebbe fare con una sola query. L’ho già fatto in passato per isolare parti di dati con formato csv.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
proverei con una combinazione tra php e mysql
primo step, calcolare il numero massimo di elementi contenuto nel campo "COLONNA"
codice:: -- in pratica conta i replace fatti sul separatore che usi nel campo SELECT max(ROUND ( ( LENGTH(COLONNA) - LENGTH( REPLACE (COLONNA, " ", "") ) ) / LENGTH(" ") ) + 1 ) FROM TABELLA
secondo step, preparare una subquery da mettere in join con la TABELLA
codice:<?php $value = 5; # il MAX della query precedente $subquery = "SELECT 0 position UNION ALL\n"; for($i = 1; $i <= $value; $i++) { $subquery .= "SELECT $i "; if ($i != $value) { $subquery .= "UNION ALL\n"; } }
terzo step, preparare la query finale
codice:$query = " SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(COLONNA, ' ', n.position+1), ' ', -1) as COLONNA_PART FROM TABELLA INNER JOIN ($subquery # la subquery preparata prima ) n ON LENGTH(REPLACE(COLONNA, ' ' , '')) <= LENGTH(COLONNA)-n.position order by id, COLONNA_PART "
Ultima modifica di clasku; 03-11-2018 a 12:02
cappero quindi senza tabelle di appoggio?
mò provo e vi dico
infinite grazie a tutti
ah, dimenticavo... ho usato lo spazio per suddividere i campi della colonna, nel caso devi variare i primo parametro di LENGHT() ed il secondo di SUBSTRING_INDEX() e REPLACE()
Bravissimo clasku !
Pero' una domanda rimane. E' una query che viene eseguita poco spesso o puo' essere eseguita a qualunque momento da chiunque ?
La strada migliore sarebbe di riempire una tabella con gli elementi ad ogni inserimento nella tabella "principale". Anche se ci sarebbero altre considerazioni da fare come agire in caso di modifica.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
grazie badaze
una normalizzazione del DB secondo me è necessaria
immagino tre tabelle
- evento (id_evento, descrizione, altri campi)
- soggetto (id_soggetto, descrizione, altri campi)
- partecipante (id_soggetto, id_evento)
magari theseo ci dice se ha risolto, io mi riservo di riempire una tabella di dati e testare le prestazioni
eccomi
allora il DB ha UNA tabella con i campi classici: id, nome, cognome, classe (ah ne approfitto x dirvi che sono un insegnante NON di informatica autodidatta php... quindi dovete avere molta pazienza con me, questo script mi serve x il sito della mia scuola, è un db che raccoglie i dati di alcuni test fatti dagli allievi e dovrebbe restituire i risultati...). Uno dei campi raccoglie gli ID delle risposte errate da ogni allievo separate da virgola, ecco ad esempio dei record:
ID NOME COGNOME SBAGLIATE
1 paolo rossi 765,453,23,678,998
2 luca bianchi 765,34,356,556,78,998
3 marco ferri 765,45,234
noi avremmo bisogno di capire quali sono le domande che + li hanno fatti sbagliare quindi nel caso dell'esempio sopra vorremmo avere una ECHO che si pubblicasse un elenco così-->
1) 765 (perchè è presente 3 volte)
2) 998 (perchè è presente 2 volte)
3) le altre...
chiarito ciò, ho provato con il codice di clasku ma mi restituisce
Parse error: syntax error, unexpected ','
nella riga 6
ho anche provato con il codice di badaze, ho fatto le tabelle di appoggio e mi viene il DONE finale ma non so come collegarlo al tuttoCodice PHP:
$query = "SELECT
max(ROUND (
(
LENGTH(COLONNA)
- LENGTH( REPLACE (html_sbagliatepp, ",", "") )
) / LENGTH(" ")
) + 1 )
FROM questionario_arch";
Usa l’apice singolo per racchiudere la query invece del doppio, ti da errore perché i parametri sono racchiusi tra doppi apici. Cosa usi per programmare? In genere i software segnalano questi errorini, visualmente colorando in maniera non coerente la stringa
ricorda, nelle stringhe
se sono racchiuse tra doppi apici, eventuali altri doppi apici nella stringa devono essere escapati con un backslash (esempio “il mio nome è \”Mario\”. Un saluto”. In questo caso php fa il parsing di eventuali variabili (tipo $var) sostituendole con il loro valore
se sono racchiuse tra apici singoli, devi escapare gli altri apici singoli m non quelli doppi. In questo caso non viene fatto il parsing delle varibili presenti nella stringa
uso editpad pro, mi dava un colore errato ma non capivo xchè...
ok corretto grazie adesso non dà errori e tutto il tuo codice è online!!!!
devo solo collegare la tua ultima query-->
con un ECHO che mi stampi il risultato... giusto?Codice PHP:
$query = " SELECT id,
SUBSTRING_INDEX(SUBSTRING_INDEX(html_sbagliatepp, ',', n.position+1), ' ', -1) as html_sbagliatepp_PART
FROM
miatabella
INNER JOIN
($subquery # la subquery preparata prima
) n
ON LENGTH(REPLACE(html_sbagliatepp, ',' , '')) <= LENGTH(html_sbagliatepp)-n.position
order by id, html_sbagliatepp_PART"
?>