Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [MySQL] unire più tabelle

    Salve volevo avere un vostro consiglio se è fatta bene questa ricerca su più tabelle:

    Codice PHP:
    $cerca=trim($_REQUEST["cerca"]);

    $sql1"from tabella1Where Oggetto_IT Like '%$cerca%' and IT Like '%$cerca%'";
    $sql2"from tabella2 Where Oggetto_IT Like '%$cerca%' and newseventi.IT Like '%$cerca%'";
    $sql3"from tabella3 Where Oggetto_IT Like '%$cerca%' and interviews.IT Like '%$cerca%'";

    $QueryList=mysql_db_query($db1,"Select IDArticle, Oggetto_IT, IT $sql1 UNION Select IDArticle, Oggetto_IT, IT $sql2 UNION Select IDArticle, Oggetto_IT, IT $sql3Select  Order by Oggetto_IT Asc Limit $recstart,$recperpage") or die (mysql_error()." errore estrazione lista dati"); 

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    1) Mi sfugge l'utilità di assegnare alle tre variabili soltanto una porzione delle query per poi agganciarci la parte relativa alla selezione dei campi.
    2) La funzione mysql_db_query è deprecata. Usa mysql_query.
    3) Sei sicuro che ti serva AND e non OR? (magari vuoi proprio che le due condizioni siano contemporaneamente verificate. E' solo un dubbio che mi è sorto).

  3. #3
    si hai ragione mi serve OR no AND ma come posso farla mi daresti una mano per fare la ricerca in queste 3 tabelle??

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se conosci le union qual'è esattamente la difficoltà nello scrivere la query?

  5. #5
    e che mi da errore.

    Unknown column 'IDArticle' in 'field list' errore estrazione lista dati

    eppure si trova il campo

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Nella variabile $sql1 vedo questo:

    from tabella1Where

    senza spazi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    mmhhh. io ti dò qualche ideuzza volante
    1) non ha un gran senso, a mio parere, fare qualcosa del genere.
    una query "grossa" non è eseguita più velocemente (da mysql) delle 3 query "piccole" i motivi son tanti, ma diciamo che l'overhead è talmente piccolo (delle 3 query) che ti suggerirei di eseguire le 3 query indipendentemente e fondere i risultati a livello applicazione.
    se poi usi tabelle myisam le lockerai per un tempo tre volte maggiore.
    (in teoria) potresti eseguire le query in parallelo (su db diversi)

    2)
    riguardo poi alla ricerca in sè ti faccio notare che è del tipo più lento in assoluto, ma questo lo saprai già, ovvero i "like %...%' equivalgono a scan dell'intera tabella per ogni query

    3)
    [per puristi] il LIKE mysql non è case sensitive, a meno che nessuno ti "sminchi" il collate "a tradimento", attivandoti in sintesi la ricerca case-sensitive.
    A quel punto, giusto per andar sul sicuro, puoi mettere un bel UPPER nella query e passando il parametro già in UPPERCASE

    4)
    [per i puristi] i LIMIT X,Y sono devastanti dal punto di vista delle prestazioni, poni grande cura nell'utilizzarli (anzi, possibilmente, sono da rimuovere). mysql non è un granchè da questo punto di vista

  8. #8
    bè franzauker grazie per le diritte ma mi daresti una amno a segure questa query di ricerca???
    Ti sarei davvero grado.
    Poi il limit come faccio a paginare se lo tolgo???

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da techno
    bè franzauker grazie per le diritte ma mi daresti una amno a segure questa query di ricerca???
    scrivo pochissimo e malvolentieri in PHP, nel caso ci sarà chi è ben più esperto
    Poi il limit come faccio a paginare se lo tolgo???
    ...
    semplice... non pagini

    la risposta sembra paradossale, ma l'esperienza insegna che è molto raro aver bisogno di centinaia e centinaia di risultati: il modo-google è "guarda i primi 5,10, 20, e buonanotte"

    metti quindi un LIMIT (sempre cosa buona e giusta per una ricerca che potenzialmente ritorna tante righe), ma semplice, del tipo LIMIT 100

    Mostra in un colpo solo, e buonanotte.

    Questo il mio suggerimento, poi vedi te se è indispensabile "paginare"

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.