Visualizzazione risultati 1 fino 15 di 15

Discussione: Join fra tabelle con limit

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito Join fra tabelle con limit

    Buongiorno,
    oggi dopo tantissimo tempo torno a buttare giù un po' di righe di PHP solo che mi trovo davanti ad un intoppo che molto probabilmente è banale ma che al momento non riesco a risolvere.

    Ho due tabelle:

    Codice:
    |ID |VALUE 1 | VALUE 2 | VALUE 3 | ECC
    ----------------
    | 1 | abc | 123 | a2e | ecc
    | 2 | def | 456 | b3d | ecc
    | 3 | ghi  | 789 | c6e | ecc
    Codice:
    |ID |VALUE|
    ----------------
    | 1 | abc
    | 2 | def
    Necessito di unire il valore "Value" della seconda tabelle con la prima a seconda dell'ID in modo che risultassero come se fosse una sola tabella e di conseguenza con una sola query ottengo doppio risultato.

    Ora devo utilizzare anche un "LIMIT" e quindi estrarre un determinato numero di query, solo che (se non ho capito male l'errore) avendo la prima tabella più record della seconda la query non funziona.

    Codice PHP:
    SELECT * FROM tab_a AS a, tab_b AS b WHERE a.ID = b.ID LIMIT 3,3
    Soluzioni?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    Guest

    Predefinito

    Se non ho capito male dovrebbe bastare aggiungere il GROUP BY:
    Codice:
    SELECT * FROM tab_a AS a, tab_b AS b
    WHERE b.ID = a.ID
    GROUP BY a.VALUE
    LIMIT 3,3

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Mi spiace non funziona.
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    Guest

    Predefinito

    Hai un INDEX del campo VALUE però? Perché mi sembra molto strano non funzioni...

  5. #5
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    prova a cambiare i nomi delle rispettive tabelle, ed ad identificarle con la prima lettera iniziale, es.:
    Codice PHP:
    SELECT * FROM a_tab AS a, b_tab AS b WHERE a.ID = b.ID LIMIT 3,3

    //JOIN:
    SELECT * FROM a_tab AS a JOIN b_tab AS b ON a.id = b.id LIMIT 3,3
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  6. #6
    Guest

    Predefinito

    Credo la JOIN sia sbagliata per il semplice fatto che lui deve selezionare i dati in base a TUTTE e due le tabelle, non aggiungerne degli altri in pase ai valori di una

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Allora cosa c'è da sapere:

    1. Tutte le tabelle hanno e devono avere un prefisso.
    2. Il vecchio codice era:

    Codice PHP:
    $a = mysql_fetch_array(mysql_query("SELECT * FROM tab_a WHERE id = '".$_GET['id']."'"));
    $b = mysql_fetch_array(mysql_query("SELECT * FROM tab_b WHERE id = '".$a['catid']."'"));
    Le due variabili poi andavano a costruire una terza chiamata $c che comprendeva pezzi misti di risultati di $a e di $b.
    Apprezzi l'aiuto? Offrimi un caffè!

  8. #8
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    scusa non avevo letto bene ......

    allora l'errore è che imposti un limite che non può essere letto per entrambi le tabelle, la tab_a ha più record rispetto alla tab_b

    e vuoi estrarre tutti i risultati con gli stessi id.....

    un modo è che devi leggere quanti record ci sono per ciascuna tabella....

    con LIMIT 0,3 funziona?
    Ultima modifica di EuroSalute : 04-06-2011 alle ore 20.03.30 Motivo: info...
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  9. #9
    Guest

    Predefinito

    Ripeto miky, hai creato l'indice nelle due tabelle e provat? Perché è impossibile che non funzioni; almeno, per ciò che io ho capito e mi pare sia giusto.


  10. #10
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    scusa non avevo letto bene ......

    allora l'errore è che imposti un limite che non può essere letto per entrambi le tabelle, la tab_a ha più record rispetto alla tab_b

    e vuoi estrarre tutti i risultati con gli stessi id.....

    un modo è che devi leggere quanti record ci sono per ciascuna tabella....

    con LIMIT 0,3 funziona?
    Si.

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Ripeto miky, hai creato l'indice nelle due tabelle e provat? Perché è impossibile che non funzioni; almeno, per ciò che io ho capito e mi pare sia giusto.

    Si. L'indice è ID.
    Apprezzi l'aiuto? Offrimi un caffè!

  11. #11
    Guest

    Predefinito

    Ma se devi fare il GROUP in base a VALUE, devi crearlo per questo, non per ID

  12. #12
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    secondo me:

    per LIMIT, come fa a funzionare se il numero di record non coincide nelle 2 tabelle, anche se id è index....

    funzionerà solo in base al numero di record più basso presente in una delle 2 tabelle...

    se vuoi utilizzare LIMIT con una sola query per entrambi le tabelle devi prima conoscere il numero di record delle rispettive tabelle....

    o fai in modo di registrare lo stesso numero di record....per entrambi le tabelle
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  13. #13
    Guest

    Predefinito

    No Euro, spiegando la query di Miky, per quanto ho capito, dovrebbe fare questo:

    Estrai unicamente tutti i record della prima tabella dove VALUE è uguale a quello della seconda tabella.

    E' ovvio che, mettendo LIMIT 3,3 SUBITO, se hai meno records, non te li estrarrà, quindi il tuo ragionamento è corretto, ma in una pagina, si presuppone tu parta dalla prima, poi generi la paginazione, appunto, in base al numero dei records.


  14. #14
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    ma è quello che ho detto io...

    ma perchè prima non estrae il numero di record per ogni tabella e poi imposta il LIMIT corretto per una sola query?

    all'inizio partirà con LIMIT 0,3 poi 3,3 poi 6,3 ....se ho capito bene quello che vuol fare?
    Ultima modifica di EuroSalute : 05-06-2011 alle ore 13.56.34 Motivo: info...
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  15. #15
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non riesco a capire se l'errore è una query sintatticamente errata o un recordset vuoto (perché non ci sono risultati).

    La clausola LIMIT A,B significa "B record a partire dal numero A", e per inciso avrebbe un senso solo se c'è anche una clausola di ordinamento (ORDER BY) nella stessa query. Se l'ordinamento non viene messo, saranno estratti tre record, ma non è garantito che rieseguendo la stessa query i risultati siano gli stessi: senza una clausola ORDER BY devi ritenere casuale l'ordine di estrazione dei record...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

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