|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1383
|
[mysql] Lavorare con più tabelle.
Vorrei riuscire a fare a ottenere i dati di una tabella nell'ordine di quanto ricorrono in un altra tabella i campi che hanno in comune:
Ho una tabella NOMI (1 campo) e una tabella ETA' (2 campi): NOMI giovanni maria giovanni crescenzo federico maria giovanni ETA ma 15 cr 32 gi 24 fe 12 Vorrei ottenere: 24 15 32 12 Perchè Giovanni ricorre 3 volte nella tabella nomi e quindi l'età di giovanni viene per prima, maria ricorre 2 volte e dunque la sua età viene per seconda etc. Ho anche il problema che nella tabella età i nomi non sono per esteso ma ce n'è solo una parte. Qualcuno sa come fare ? Io ho fatto molte ricerche su internet ma l'unica cosa che sono riuscito a scoprire e l'uso di LIKE CONCAT("%",VARIABILE CON INIZIALE,"%") per trovare un nome avendone solo l'iniziale. Grazie, CIAO |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1383
|
up
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Guarda, presupposto che la situazione nella quale ti trovi ad operare mi fa orrore, dato che le relazioni tra entità non si tracciano così, questa query potrebbe fare al caso tuo:
Codice:
select e.eta from nomi n join eta e on n.nome like e.nome || '%' group by e.eta order by count(e.eta) desc Codice:
ETA
-------------
24
15
12
32
Comunque ripeto, un join basato sull'iniziale del nome è raccapricciante...
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2005
Città: Palermo
Messaggi: 2579
|
Quote:
p.s. il tuo ordinamento è giusto in quanto federico compare prima di giovanni (il secondo)
__________________
Utente gran figlio di Jobs ed in via di ubuntizzazione Lippi, perchè non hai convocato loro ? Ultima modifica di giannola : 19-01-2007 alle 14:54. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Ma vabbè...fosse questo il problema!
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1383
|
Quote:
L'esempio che ho portato con i nomi è solo una semplificazione della situazione su cui devo operare. In pratica sto cercando di modificare il motore di ricerca PHPDig ( che uso nel sito in signature ) che oridina i risultati per quanto ricorre la parola cercata nel file trovato. Io voglio invece che li ordini per per numero di click ricevuti e che dia maggior peso a quei file in cui la parola cercata si trova all'inizio. Per non modificare il programma in modo radicale ma solo la query sql e poche altre cose devo accettare compromessi in quanto a pulizia del software. Una cosa però non riesco a capire: perchè una stessa query sql ripetuta svariate volte in alcuni casi ordina i risultati in modo comunque giusto ma diverso? Non dovrebbe dare sempre lo stesso risultato? Grazie per la query che mi hai inviato, appena posso la provo. Ciao |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1383
|
Quote:
Adesso però ho un problema: sono riuscito finalmente a costruire la query che mi serve $query = "SELECT spider.spider_id,count(c_url) as weightA, spider.site_id, '2' FROM ".PHPDIG_DB_PREFIX."keywords as k,".PHPDIG_DB_PREFIX."engine as engine, ".PHPDIG_DB_PREFIX."spider as spider left join ".PHPDIG_DB_PREFIX."clicks as clicks on clicks.c_url like concat('%',spider.file) and not spider.file='' WHERE engine.key_id = k.key_id ".$ccc[$n]." ".$kconds[$n]." AND engine.spider_id = spider.spider_id $wheresite $wherepath GROUP BY clicks.c_url, spider.spider_id,spider.site_id UNION SELECT spider.spider_id,count(c_url) as weightA, spider.site_id, '0' FROM ".PHPDIG_DB_PREFIX."keywords as k,".PHPDIG_DB_PREFIX."engine as engine, ".PHPDIG_DB_PREFIX."spider as spider left join ".PHPDIG_DB_PREFIX."clicks as clicks on clicks.c_url like concat('%',spider.file) and not spider.file='' WHERE engine.key_id = k.key_id ".$cca[$n]." ".$kconds[$n]." AND engine.spider_id = spider.spider_id $wheresite $wherepath GROUP BY clicks.c_url, spider.spider_id,spider.site_id"; utilizzando XAMPP con mysql5 funziona perfettamente, ma quando la carico sul server di godaddy.com dove è installato mysql4, alla prima ricerca mi da i risultati, alla seconda me ne da molti meno dalla terza in poi non funziona più. Eppure in locale con XAMPP sto usando lo stesso identico database che ho in remoto. Cosa può essere? Ciao |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1383
|
up
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:03.



















