Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [SQL] operatore like

  1. #1
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441

    [SQL] operatore like

    Ho un problema: ho due tabelle e le devo collegare con operatore like considerando due capi di queste.

    Il problema è che se in una delle due tabelle ho la parola MICROSOFTBILLGATES e nell'altra ho STEVEJOBSMICROSOFTWINDOWSAPPLE non me le considera.

    Questa è il mio script:
    Codice PHP:
    $sql "SELECT * FROM TAG WHERE IDU=$idu";
    $que mysql_query($sql);
    $row mysql_fetch_assoc($que);            
    $ris $row['TAG']; /*MICROSOFTBILLGATES*/
    $que mysql_query("SELECT * FROM post INNER JOIN tag ON post.TAG LIKE '%$ris%"); 
    Come risolvo? E' da troppo che ho questo problema, è importante.

  2. #2
    Il collegamento tra due tabelle lo puoi fare con due campi uguali, cioe' che abbiano lo stesso tipo di campo e contenuto.
    In pratica devi avere un campo nella tabella post che sia identico e quindi si relazioni alla tabella tag e con il where selezioni nel tuo esempio tag like '%MICROSOFT%'.

    La query sara':

    codice:
    $que = mysql_query("
                  SELECT * 
                  FROM post 
                  INNER JOIN tag ON post.TAG = tag.TAG
                  WHERE tag.TAG LIKE '%$tag_da_cercare%' 
                  ");

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441
    No non funziona, la mia discussione era solo un esempio. Ora mi spiego meglio.

    Io in realtà nella tabella post, nel campo tag, potrei avere anche questo questo:
    #STEVE #MICROSOFT

    Se nella tabella tag, nel campo tag, ho questo:
    #MELA #MICROSOFT

    ...le due tabelle dovrebbero collegarsi perchè in comune hanno la sequenza di lettere 'MICROSOFT' in ordine uguale, però non vengono considerate, non mi funziona, perchè?

    Se avessi per esempio nella tabella tag la parola #MICROSOFT e basta tutto funzionerebbe, però quel campo in questo caso è popolato anche da #MELA, e quindi come risolvo?

  4. #4
    Originariamente inviato da andbaz
    No non funziona, la mia discussione era solo un esempio. Ora mi spiego meglio.

    Io in realtà nella tabella post, nel campo tag, potrei avere anche questo questo:
    #STEVE #MICROSOFT

    Se nella tabella tag, nel campo tag, ho questo:
    #MELA #MICROSOFT

    ...le due tabelle dovrebbero collegarsi perchè in comune hanno la sequenza di lettere 'MICROSOFT' in ordine uguale, però non vengono considerate, non mi funziona, perchè?

    Se avessi per esempio nella tabella tag la parola #MICROSOFT e basta tutto funzionerebbe, però quel campo in questo caso è popolato anche da #MELA, e quindi come risolvo?
    perche' non e' cosi' che funziona la relazione tra tabelle. Nella tabella "a" ci deve essere un campo identico alla tabella "b" preferibilmente un id numerico.

    I campi devono essere "uguali" e non "LIKE"e la relazione non puo' essere tra il contenuto parziale di due campi. Per fare un esempio pratico dovresti avere nella tabella tag un record id, un record con i tag e nella tabella "post" associare un record post.tag_id con lo stesso contenuto di tag.id

    Se un record post puo' essere associato a piu' record tag e un record tag puo' avere piu' riferimenti a "post" allora ti serve una terza tabella di unione che unisca il record post.id al tag.id per evitare la poco gestibile relazione diretta di molti a molti.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441
    Scusa, ma non ho capito.

    Cioè io ho due tabelle, post e tag, e se le parole contenute nel campo tag della tabella post sono presenti anche nel campo tag nella tabella tag, allora viene stampato il record di post.

    Che struttura delle tabelle e che query mi consigli? Perchè credo che tu mi stia dicendo che tutto questo non ha molto senso

  6. #6
    una regola sarebbe quella di usare nei campi dei valori atomici. Cioe' univoci.

    Ora dimmi quale sarebbe il senso di cercare un valore "duplicato" nelle tabelle post e tag? I tag vanno scritti una sola volta nella tabella tag e la tabella post porta il riferimento id del valore nella tabella tag. Se scrivi lo stesso valore sia in post che in tag e questi valori in tag possono essere anche multipli cioe' non atomici, ogni volta che cambia qualcosa devi cambiarla in entrambe le tabelle tutte cose che mi suggeriscono una struttura del database un po' approssimata. Altrimenti tanto varrebbe mettere tutti i tag record per record nella stessa tabella post

    vedrei meglio la cosa con una tabella tag che porta l'elenco dei tag
    una tabella post dove trova posto il riferimento al tag (anche piu' di uno)
    una tabella di unione post <-> tag.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441
    Perchè vedi ti spiego: i post sono delle discussioni, e ogni una di queste ha delle tag, delle parole chiave. Mentre la tabella tag ha due campi: id e tag. L'id è il numero dell'utente mentre le tag sono le parole chiave a cui è iscritto.

    Per cui se un un utente ha tra le sue tag a cui è iscritto la parola #MICROSOFT allora sulla sua pagina web verranno stampati tutti i post con la parola #MICROSOFT nel campo tag.

    Intendi?

  8. #8
    Originariamente inviato da andbaz
    Perchè vedi ti spiego: i post sono delle discussioni, e ogni una di queste ha delle tag, delle parole chiave. Mentre la tabella tag ha due campi: id e tag. L'id è il numero dell'utente mentre le tag sono le parole chiave a cui è iscritto.

    Per cui se un un utente ha tra le sue tag a cui è iscritto la parola #MICROSOFT allora sulla sua pagina web verranno stampati tutti i post con la parola #MICROSOFT nel campo tag.

    Intendi?
    Se leggo bene allora il campo tag della tabella tag e' un attributo del record presente nella tabella post. Cioe' se ogni campo e' contraddistinto dall'id del post che ci sta a fare in una tabella separata? Tanto vale avere solo la tabella post comprensiva del campo tag.

    In questo caso la query sarebbe semplificata:

    codice:
     select *
    from post
    where tag like '%#MICROSOFT%'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441
    No perchè l'id è sono l'id dell'utente, e non quello dei post.

    S io fossi il compilatore: "Ok, allora vediamo a che tag è iscritto questo utente: #MICROSOFT #STEVEJOBS #PCWORLD; ok, vediamo di trovare nella tabella post tutti i post che contengono nel campo tag almeno una di queste tag, e poi li stampo!"

    La query che mi hai postato sarebbe valida solo e solo se ogni utente avesse la possibilità di registrarsi a solo una tag, invece ogni utente può avere un diverso numero di parole chiave...

    Intendi?

  10. #10
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    441
    UP

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 © 2026 vBulletin Solutions, Inc. All rights reserved.