Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: ricerca su 4 tabelle

  1. #1

    ricerca su 4 tabelle

    ciao a tutti ho bisogno estremo di un vostro aiuto visto che tutti i miei tentavi non vanno a buon fine.

    Deve effettuare una ricerca su 4 tabelle tramite una variabile $search.

    Le tabelle con i rispettivi campi interessati da ricercare sono le seguenti:

    tabella page:
    -----------------------
    | ID | Page | Content |

    tabella avent:
    --------------------------------------
    | ID | Object | Description | Content |

    tabella news:
    ----------------------------
    | ID | Object | Description |

    tabella podcast:
    -------------------------
    | ID | Title | Description |

    ho provato così:
    Codice PHP:
    $sql="SELECT page.ID, Page_it, page.Content_it, event.ID, event.Object_it, ";
    $sql.="event.Description_it, event.Content_it, news.ID, news.Object_it, ";
    $sql.="news.Description_it, podcast.ID, Title_it, podcast.Description_it ";
    $sql.="FROM page, event, news, podcast WHERE Page_it LIKE '%$research%' OR page.Content_it LIKE '%$research%' OR ";
    $sql.="event.Object_it LIKE '%$research%' OR event.Description_it LIKE '%$research%' OR event.Content_it LIKE '%$research%' OR ";
    $sql.="news.Object_it LIKE '%$research%' OR news.Description_it LIKE '%$research%' OR Title_it LIKE '%$research%' OR ";
    $sql.="podcast.Description_it LIKE '%$research%'";
     
    mysql_query($sql) or die (mysql_error()); 
    ma senza risultati purtroppo ache se la ricerca effettuata è contenuta in una tabella mi da 0 come risultati.

  2. #2
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    ma i vari campi page, content, description, title sono testuali?

    cmq prova così:
    codice:
    SELECT id, page as pagina, content as contenuto, '-' as oggetto, '-' as descrizione, '-' as titolo FROM page WHERE campo1 LIKE '%$ricerca%' OR campo2 LIKE '%$ricerca%' ... OR campoN LIKE '%$ricerca%'=richiesta_riferimenti.id 
    UNION 
    SELECT id, '-' as pagina, content as contenuto, object as oggetto, description as descrizione, '-' as titolo FROM event WHERE campo1 LIKE '%$ricerca%' OR campo2 LIKE '%$ricerca%' ... OR campoN LIKE '%$ricerca%'=richiesta_riferimenti.id 
    UNION 
    SELECT id, '-' as pagina, '-' as contenuto, object as oggetto, description as descrizione, '-' as titolo FROM news WHERE campo1 LIKE '%$ricerca%' OR campo2 LIKE '%$ricerca%' ... OR campoN LIKE '%$ricerca%'=richiesta_riferimenti.id 
    UNION 
    SELECT id, '-' as pagina, '-' as contenuto, '-' as oggetto, description as descrizione, title as titolo FROM podcast WHERE campo1 LIKE '%$ricerca%' OR campo2 LIKE '%$ricerca%' ... OR campoN LIKE '%$ricerca%'=richiesta_riferimenti.id
    ovviamente fai attenzione ai nomi delle tabelle e dei campi, minuscole e maiuscole per capirci
    nelle condizioni sostituisci a campo1,...,campoN i nomi dei relativi campi (l'ho scritta così per farti capire la sintassi)

  3. #3
    senti ma questo '-' che sarebbe?

  4. #4
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    in pratica facendo la union devi avere per ogni tabella tutti gli stessi campi, e ti mette un - nel campo (se noti è usato per i campi mancanti in base alla tabella)
    ci puoi anche mettere null al posto di '-'

  5. #5
    non so se è necessario per te fare tutto con un'unica query, ma io farei 4 query distinte e poi salverei i risultati in un unico array.

    Successivamente poptrai scorrere l'array per visualizzare i risultati.

    Eventualmente puoi anche utilizzare le funzioni di ordinamento su array PHP per poter avere dei risultati ordinati in base al campo che vuoi tu.

    Un'unica query union è una soluzione che certamente funziona ma magari può risultare difficile da modificare in futuro se dovessi aggiungere o togliere dei campi.

  6. #6
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    può ordinare tranquillamente anche sulla query con le union ... basta mettere l'order by
    per automatizzare le query basta mettere i campi in array e ciclarli per leunion nel caso ... ma penso vada oltre quello che sta chiedendo

  7. #7
    grazie raga per tutto l'aiuto che mi date, l'array con 4 query ci avevo pensato ma la terrò come ultima soluzione.

  8. #8
    Originariamente inviato da Fichico
    in pratica facendo la union devi avere per ogni tabella tutti gli stessi campi, e ti mette un - nel campo (se noti è usato per i campi mancanti in base alla tabella)
    ci puoi anche mettere null al posto di '-'
    Ho provato ad inserire altri alias per ricavare la tabella da dove veninva estratto il risultato facendo così:
    Codice PHP:
    $sql="(SELECT ID, Page_it as pagina, Content_it as contenuto, null as oggetto, null as descrizione, null as titolo, 'db1' as mydatabse FROM page as db1 WHERE db1.Page_it LIKE '%$research%' OR db1.Content_it LIKE '%$research%')";
    $sql.=" UNION ";
    $sql.="(SELECT ID, null as pagina, Content_it as contenuto, Object_it as oggetto, Description_it as descrizione, null as titolo, 'db2' as mydatabse FROM event as db2 WHERE db2.Object_it LIKE '%$research%' OR db2.Description_it LIKE '%$research%' OR db2.Content_it LIKE '%$research')";
    $sql.=" UNION ";
    $sql.="(SELECT ID, null as pagina, null as contenuto, Object_it as oggetto, Description_it as descrizione, null as titolo, 'db3' as mydatabase FROM news as db3 WHERE db3.Object_it LIKE '%$research%' OR db3.Description_it LIKE '%$research%')";
    $sql.=" UNION ";
    $sql.="(SELECT ID, null as pagina, null as contenuto, null as oggetto, Description_it as descrizione, Title_it as titolo, 'db4' as mydatabase FROM podcast as db4 WHERE db4.Title_it LIKE '%$research%' OR db4.Description_it LIKE '%$research%')";
    ... 
    poi ho provato a stampare semplicemente a video la tabella di appartenenza:
    Codice PHP:
    $Query=mysql_query($sql) or die (mysql_error());
    while(
    $Rec=mysql_ftech_array($Query)){
    echo 
    $Rec["mydatabase"];

    ma non mi tira fuori il valore anche se la questa funziona perchè la ricerca tira fuori i record ricercati.

  9. #9
    Originariamente inviato da techno
    Scusa un ultima domanda es e vorrei sapere da quale tabella viene estratto il risultato?
    Tocca interrogare la tabella dei congiuntivi!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    ok risolto avevo sbagliato a scrivere mydatabase nella query
    grazie ancora ragazzi.

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