Newsgroup: it.comp.www.php
Titolo: Query complessa su MySQL - HELP!

Ciao a tutti,
Non riesco a venirne fuori, devo fare una query sql un po' complessa su
mysql...
In pratica dovrei controllare se una $stringa passatta allo script è
contenuto in uno dei campi presenti in PIU' tabelle diverse...
Io ho provato così, ma il risultato è sempre 0 record:
SELECT
                l.lessonid,
                l.title AS lt,
                l.description AS ld,
                a.articleid,
                a.title AS at,
                a.description AS ad
FROM
                lessons l,
                articles a
WHERE
                l.title like '%php%' OR
                l.description like '%php%' OR
                a.title like '%php%' OR
                a.description like '%php%'
Inoltre, se possibile, sarebbe grandioso se potessi ordinare la query in
modo mettere ai primi posti i record con più corrispondenze, tipo motore di
ricerca insomma.... mi avevano detto di provare con count(*) ma peggio che
peggio!!!
Alex

Errore di concetto :-)
Quella query che tu usi diciamo che "affianca o incrocia" tabelle.
Questo significa che:
tabella a
tabella b
select * from a,b
significa
tabella a riga 1 + tabella b riga 1
tabella a riga 2 + tabella b riga 2
etc etc
Ma cosa succede se la tabella a contiene più righe della tabella b ?? :))
Personalmente ritengo che la tua query dovrebbe comunque dare dei risultati
(anche se i tempi di ricerca saranno accettabili solo per 3000 record o meno
:-)
Mai sentito parlare di
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');
(cerca la parola database in una tabella chiamata articles ed in particolare
nelle colonne title e body)
...For every row in a table it returns relevance - a similarity measure
between the text in that row (in the columns that are part of the
collection) and the query. When it is used in a WHERE clause (see example
above) the rows returned are automatically sorted with relevance decreasing.
Vedi: 
http://www.mysql.com/doc/F/u/Fulltext_Search.html
J

La table di servizio potresti farla con MERGE :-))
J

Manca la condizione di join tra le tabelle l ed a.  Spiega meglio cosa
ti serve.

 etc etc
Beh, non proprio.
	SELECT *
	FROM a,b
produce un "semplice" prodotto cartesiano fra le due tabelle, quindi 
ogni tupla (riga) di a e' affiancata a tutte le tuple di b:
	a.1 + b.1
	a.1 + b.2
	 :     :
	a.1 + b.N
	a.2 + b.1
	a.2 + b.2
	 :     :
	a.2 + b.N
	a.M + b.1
	a.M + b.2
	 :     :
	a.M + b.N
ottenendo quindi una tabella risultato di (M * N) tuple
MjdP

                 a.description like '%php%'
Non ricordo la sintassi SQL, ma non potrebbe essere un problema di 
precedenze fra gli operatori LIKE e OR nella clausola WHERE?
  WHERE
                  (l.title like '%php%') OR
                  (l.description like '%php%') OR
                  (a.title like '%php%') OR
                  (a.description like '%php%')
Comunque se le due tabelle sono fra di loro svincolate (non hanno 
nessuna relazione che le lega) la cosa piu' semplice da fare e' una UNION:
	SELECT l.lessonid, l.title, l.description
	FROM l
	WHERE (l.title LIKE '%php') OR (l.description LIKE '%php')
	UNION ALL
	SELECT a.articleid, a.title, a.description
	FROM a
	WHERE (a.title LIKE '%php') OR (a.description LIKE '%php')
ottenendo una tabella che e' "unione" delle due singole query. In questo 
caso la UNION funziona poiche' entrambi le query "ritornano" tre colonne 
dello stesso tipo.
MjdP

 colonne dello stesso tipo.
se non sbaglio la UNION su mySQL non c'č!!

punkarruso wrote:
 > se non sbaglio la UNION su mySQL non c'č!!
Ooops... la query postata non era stata provata.
E in effetti il manuale della versione di mySQL che ho installato sulla
mia macchina (3.23.30) riporta la UNION JOIN nell'appendice 'Things that
must done in the real near future'.
Comunque la query in esame puo' essere spezzata in due singole query e 
l'operazione di UNION realizzata via PHP, se proprio necessaria.
Ciao
MjdP

 must done in the real near future'.
comunque, dalla 4.0 mysql supporterà le union.
(adesso è in fase alpha1)

 (adesso è in fase alpha1)
E magari anche le query composte del tipo
	SELECT ...
	FROM ...
	WHERE ... (SELECT ... FROM ... WHERE ...)
?
Speriamo!
Ciao
MjdP
 

 a
nested query dalla 4.1 (febbraio?)
www.mysql.com
 per info.
ciao