Moduletto con articoli consigliati in base ai tag

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Dovrei creare un moduletto che a fine articolo prenda nel db gli articoli correlati in base ai tags ( inseriti nel db in un'unica cella come "prova, test, altrotag, tags, ecc" ) e confrontandoli con quelli dell'articolo visualizzato mi faccia una lista dei 5 articoli che trattano argomenti simili..
Qualcuno ha qualche idea su come realizzarlo?

Avevo pensato a creare un'array dai dati estrapolati dalla cella e poi fare un ciclo con like, ma ancora non ho chiaro il come realizzarlo.

Grazie in anticipo per eventuali risposte.

P.S. girando su internet ho trovato questo script ma nn l'ho capito benissimo..

PHP:
$query_parts = array();
foreach ($array_name as $val) {
// Cosa fa la funzione mysql_real_escape_string()?
    $query_parts[] = "'%".mysql_real_escape_string($val)."%'";
}
// qui non ho capito la parte OR url LIKE
$string = implode(' OR url LIKE ', $query_parts);

// qui non ho capito {$string} le parentesi graffe
$tank = "SELECT url FROM `PHP`.`db` WHERE url LIKE {$string}";
 
Ultima modifica:

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Sono riuscito nell'intento, unica cosa che non riesco a capire è il perchè non mi esclude l'articolo stesso dove questa lista è contenuta, nel senso se il mio articolo è "ciao prova" con id 1 ed io facio una query esattamente come questa:

PHP:
'SELECT COUNT(*) FROM blog WHERE keywords LIKE "%prova key%" OR keywords LIKE "%prettt%" OR keywords LIKE "%prova%" OR keywords LIKE "%ecompilat%" OR keywords LIKE "%volipianss%" AND pub = 1 AND id <> "24"'

Dovrebbe teoricamente trovare tutti gli articoli che contengono una delle keywords indicate che abbiano pub = 1 e id diverso da 24.. Giusto ?
Ho provato anche con != anziché <> ma nulla, la query funziona tranne che nell'ultima parte che dovrebbe servirmi a non includere nella lista l'articolo stesso in cui la lista si trova.


Ho provato anche a togliere gli apici al 24 facendolo diventare di fatto un numero ma nulla..
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Forse ho risolto in questo modo, ma non ho capito il perchè.. Qualcuno me lo spiega?
Aggiungendo delle parentesi tonde dopo il where, che contenessero tutti gli OR. A cosa servono?
PHP:
'SELECT COUNT(*) FROM blog WHERE (keywords LIKE "%prova key%" OR keywords LIKE "%prettt%" OR keywords LIKE "%prova%" OR keywords LIKE "%ecompilat%" OR keywords LIKE "%volipianss%") AND pub = 1 AND id <> "24"'
 

The-Night

Utente Attivo
18 Ott 2015
59
0
0
Ciao, non ne sono sicuro al 100% ma penso che sia perché diventa una condizione se aggiungi le tonde.
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Però in questo momento sono tutte delle condizioni nel senso anche AND ... AND ... è una condizione.. , avevo pensato ad una specie di formula, che quello che sta in parentesi dev'essere verificato prima, bhoo..
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
le parentesi nelle query funzionano come le parentesi nelle espressioni, quello che sta fra parentesi viene valutato prima e ritornato come un unico risultato. puoi anche inserire parentesi dentro le parentesi per raggruppare ulteriormente.
nella tua prima query soltanto l'ultimo OR teneva conto del AND che c'è dopo mentre mettendo gli OR fra parentesi tutti tengono conto del AND perché quello fra parentesi viene ritornato come un unico risultato.
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Diciamo che grazie a questo esempio, che comunque dovró ancora approfondire e per cui colgo l'occasione per ringraziarvi per i chiarimenti, ho conosciuto più a fondo anche le sub query. Ho visto e testato parecchie tipologie diverse e devo dire che sono molto utili ed in tanti casi un'ottima soluzione per ridurre anche di molto il codice.
Quindi ricapitolando: nei casi in cui bisogna aggiungere più OR e più AND ed altri nella stessa query, conviene suddividerli in parentesi? Mi confermate inoltre che come nelle espressioni queste verranno valutate prima dei dati posti al di fuori delle parentesi stesse.


Saluti.
G.G.
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
quando hai più opzioni per una sola variabile conviene metterle fra parentesi così verranno valutate come una sola
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
per semplificare al massimo ogni variabile della query deve risultare true perché la query riporti un risultato, quando ci sono una serie do OR oppure una combinazione di valori che possono avere stati diversi (es a=1 AND b=2 OR a=3 AND b=4) allora si mettono fra parentesi in modo da togliere gli eventuali false dal flusso della query. quindi nel caso dell'esempio di prima si dovrebbe scrivere
Codice:
(a=1 AND b=2) OR (a=3 AND b=4)
a sua volta questo può essere fra parentesi se nella query ci sono altre variabili quindi
Codice:
( (a=1 AND b=2) OR (a=3 AND b=4) ) AND c=5
in questo modo vengono valutati a e b e ritornati come un unico true o false e poi viene valutato c.
anche una serie di OR sulla stessa variabile andrebbero fra parentesi perché così tornano un unico true o false com'è giusto che sia.
spero di essere stato chiaro.

saluti
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Chiarissimo grazie, sopratutto per questo ultimo esempio che è servito a rendere tutto più lineare con esempi caso per caso.. Come sempre grazie a tutti i partecipanti :)


Saluti.
G.G.
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
G Invio form con PHP PHP 3
M Barra di navigazione con google HTML e CSS 1
T PROBLEMA CON SESSIONI PHP 3
A Problemi con move_uploaded_file PHP 7
G Menù a tendina di ricerca con query PHP 1
T fatture con voci fattura in php PHP 0
A Tabella con bottoni per aggiornamento record PHP 6
M Come selezionare e deselezionare radiobutton con jquery jQuery 1
MarcoGrazia Calcolo fra due date con esclusione delle feste PHP 7
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
M Inviare un file su un server remoto con JavaScript Javascript 0
L problema con query select PHP 2
M Come validare textarea con jquery jQuery 0
M Problemi con la stampa dei valori in php PHP 1
A Regex per isolare link interni con rel noopener PHP 0
L Problemi con il login PHP 2
F Creare elementi html con javascript Javascript 4
R Problema query con ricerca id numerico PHP 2
R [C#] Quali dipendenze occorrono su progetto "Setup" con Access Database? .NET Framework 0
F Problema con risposta PHP 0
A Sottoquery con group by per mese MySQL 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A Quale NVR con ingressi bnc ? IP Cam e Videosorveglianza 1
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
T Film interattivo con linguaggi web Programmazione 7
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Barierta Testo a comparsa con passaggio del mouse Javascript 17
M Estrarre valore con SELECT COUNT PHP 0
G VBA OpenForm con WhereCondition + LIKE su campi differenti MS Access 5
sara3 Offresi articolista con esperienza Offerte e Richieste di Lavoro e/o Collaborazione 2
L Problema RAM con Tomcat 8 Apache 0
S connesso, internet non disponibile ( con extebder tp-link850) Reti LAN e Wireless 0
L Menù con switch case C/C++ 1
Cosina Upload multiplo con invio allegati per email PHP 0
Cosina Upload multiplo con archiviazione in cartella PHP 16
B ciclare file xml con PHP PHP 1
napuleone problema con sort e asort PHP 4
F Group By con Alias condizionale MySQL 1
R [C#] Scrivere un post in grassetto con Selenium su FB Mobile .NET Framework 0
T cms con visualizzazione mind map CMS (Content Management System) 0
D Landing page con Wp CMS (Content Management System) 0

Discussioni simili