Visualizzazione risultati 1 fino 11 di 11
Like Tree2Likes
  • 1 Post By karl94
  • 1 Post By karl94

Discussione: Selezionare record da più tabelle in mysql

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito Selezionare record da più tabelle in mysql

    Avrei la necessità di selezionare tutti i record di più tabelle ( che non hanno nessuna relazione tra di loro ), spiego meglio con un'esempio.

    Ho queste due tabelle:
    Codice:
    -tabella1
    id ( integer, auto_increment )
    titolo ( varchar )
    sottotitolo ( varchar )
    
    -tabella2
    id ( integer, auto_increment )
    nome ( varchar )
    cognome ( varchar )
    Popolate con questi record:
    Codice:
    -tabella1
    1   primo_titolo    primo_sottotitolo
    1   secondo_titolo  secondo_sottotitolo
    
    -tabella2
    1   primo_nome     primo_cognome
    2   secondo_nome   secondo_cognome
    Vorrei poter selezionare con un'unica query, sempre se è possibile, tutti i record delle tue tabelle, in modo che, dalla prima tabella mi estragga solamente il campo titolo e nella seconda solamente il campo nome, in risultato della query dovrebbe essere questo:
    Codice:
    primo_titolo
    secondo_titolo
    primo_nome
    secondo_nome
    Bhe.. premette che è una cosa impossibile, per lo meno da quello che so io, ma vorrei poter ottenere con un'unica select i record di due o più tabelle perché dovrei successivamente mostrarle in più pagine, utilizzando quindi la clausola LIMIT
    Ultima modifica di sevenjeak : 12-11-2017 alle ore 22.51.23

    Sevenjeak
    Software developer and much more

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Hai ripetuto un indice auto incrementato due volte..
    Se provi qualcosa del genere?
    Codice:
    SELECT tabella1.titolo, tabella2.nome
    FROM tabella1, tabella2
    Che succede? :D
    Poi ordini per id (suppongo che l'ID sia uguale per tutte e due le tabelle) e usi limit
    Ultima modifica di darbula : 12-11-2017 alle ore 23.46.56

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Giá provato, a quando pare mysql me lo considera come se facesse un inner join.

    Il campo id in comune non lo inserito per fare la relazione tra le due tabelle ( dal punto di vista logico le due tabelle non hanno nessuna relazione ) solamente vorrei poterli selezionare in un'unica query.

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Sono pur sempre due query, solo che più record vengono raggruppate in un solo record :D.. Ql

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    No, sono due select ma la query è unica.
    darbula likes this.

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Ok, grazie, era proprio quello che cercavo

    EDIT:

    Mi sono accorto solo ora che: se passo la query:

    (SELECT title FROM tabella1) UNION (SELECT name FROM tabella2)
    alla funzione mysqli_fetch_array(), per poi successivamente passarla al var_dump(), mi stampa questo:

    array(2) { [0]=> string(12) "primo_titolo" ["title"]=> string(12) "primo_titolo" }
    array(2) { [0]=> string(14) "secondo_titolo" ["title"]=> string(14) "secondo_titolo" }
    array(2) { [0]=> string(10) "primo_nome" ["title"]=> string(10) "primo_nome" }
    array(2) { [0]=> string(12) "secondo_nome" ["title"]=> string(12) "secondo_nome" }
    Come mai secondo_nome, si trova in array[title], non si dovrebbe trovare in array[name], visto che il campo si chiama name?

    So ché potrei pur sempre stamparlo, ma avrei anche la necessità ( cosa che non ho detto nel mio primo post, visto che non avevo pensato a questo problema ) di sapere la tabella di provenienza del dato.

    La mia idea iniziale era ché: se esisteva array["title"] il dato proveniva dalla prima tabella, viceversa, proveniva dalla seconda
    Ultima modifica di sevenjeak : 13-11-2017 alle ore 13.36.52

    Sevenjeak
    Software developer and much more

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Ti ringraziò per la spiegazione... Scusami se ho detto qualcosa di errato

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Come mai secondo_nome, si trova in array[title], non si dovrebbe trovare in array[name], visto che il campo si chiama name?
    Mi sono risposto da solo.. non avevo letto, nel link postato da te, che i campi della prima select vengono utilizzati come campi nella result.

    La mia domanda allora rimane la stessa: Come fare a sapere da quale tabella prendo il dato?

    In'oltre, mi sono appena accorto, cosa che credo sia anche scritta nel link da te postato ( scusa ma con l'inglese non me la cavo tanto bene ) che, se entrambi le SELECT non hanno lo stesso numero di campi, non mi ritorna nessun risultato, potrei evitare questo?
    Ultima modifica di sevenjeak : 13-11-2017 alle ore 14.10.04

    Sevenjeak
    Software developer and much more

  10. #10
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Use of an additional column also enables you to determine which SELECT each row comes from. Extra columns can provide other identifying information as well, such as a string that indicates a table name.
    Codice:
    SELECT title,1 FROM tabella1 UNION ALL SELECT name,2 FROM tabella2
    A questo punto però non vedo una così grande utilità se poi lato applicativo devi andare a distinguere i risultati. Perché non fare due query? Sei sicuro che questa strada sia migliore?

  11. #11
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Questa query in realta mi serviva per un altro mio script, non pensavo all'idea che la query potesse non distinguire i risultati.

    Il problema é che, nell'altro script i dati inseriti in tabella sono criptati ( tramite una funzione trovata sul web ), i dati in tabella1 sono criptati con una determinata chiave, mentre tabella2 con un'altra, quindi, distinguiere i risultati mi servirebbe per sapere a quale tabella appartengono cosi da decriptare i dati con una determinata chiave, ed, come giá detto vorrei organizzare i risultati in piú pagine.

    In precedenza ho fatto come dicrvi te, per poi mettere i risultati delle query in un'arrray, mostrando a video i risultati di tale arrey in piú pagine.

    Il problema é che, facendo cosi ( non usando la clausola limit ) seleziono tutti i record in tabella.

    L'idea era anche quella di ottimizzare la query e velocizzare l'eseguzione dello script.

    EDIT

    Ho risolto.

    Pensato all'ultima query da te postato ho risolto in questo modo:

    Codice PHP:
    $query = mysqli_query($connect, "SELECT title,1 FROM tabella1 UNION (SELECT name,2 FROM tabella2)");

    while (
    $rs_query = mysqli_fetch_array($query)) {
    $current_table = (in_array(1, $rs_query)) ? "tabella1" : "tabella2");
    ...
    ...
    }
    Grazie a tutte e due per le risposte.
    Ultima modifica di sevenjeak : 14-11-2017 alle ore 11.55.26

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •