Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106

    Recupero valori e semplificazione query

    Ciao a tutti. Ho necessità di capire se è possibile raggruppare (e semplificare soprattutto!!!) le query che posto qui di seguito. E' necessario che spieghi il fine e l'utilità di quello che cerco di fare in modo che mi possiate aiutare al meglio.
    In pratica vorrei fornire ai clienti il numero di spedizione tramite mail automatica nel momento che l'ordine viene settato come EVASO. Il fatto è che ho diversi corrieri e con numeri di spedizione totalmente differenti e progressivi. Vorrei evitare di digitare (per non sbagliare) tutte le volte codici infiniti. Ho quindi questa tabella elementare che si aggiorna ad ogni evasione:

    id_corr (è l'id auto increment)
    corr_nome
    corr_spedizione (è il numero di spedizione che x ogni corriere solitamente è numericamente prestampato e progressivo)


    Ho quindi una tabella con questi valori
    id_corr | corr_nome | corr_spedizione |
    1 | GLS | 500600 |
    2 | SDA | 698200 |
    3 | GLS | 500601 |
    4 | SDA | 698201 |


    vorrei trovare il modo di recuperare contemporaneamente questi valori:

    SDA 698201
    GLS 500601
    (non mi interessa l'ordine)

    ATTENZIONE: devo cercare SOLO attreverso l'id_corr perchè spesso mandano moduli con numerazioni precedenti (dipende da quale risma li prendono per consegnarceli)

    Ho fatto questo ma mi sembra massacrante
    Codice PHP:

    $sql2
    "
    SELECT MAX(id_corr) as pippo
    FROM corrieri WHERE corr_nome = 'GLS'"
    ;
    $result2=mysql_query($sql2$connessione);
    $res2=mysql_fetch_array($result2);
    $mio_id_gls $res2[0];

    $sql3"
    SELECT * FROM corrieri WHERE id_corr = '
    $mio_id_gls'";
    $result3=mysql_query($sql3$connessione);
    while (
    $res3=mysql_fetch_array($result3)){
    echo 
    "$res3[id_corr] $res3[corr_nome] $res3[corr_spedizione]";

    e poi replico nuovamente per SDA... e poi ancora per eventuali altri futuri....

    Ho provato in mille modi, ma con GROUP BY corr_nome mi mantiene giusto l'id e sbagliati gli altri valori perchè group restituisce il primo valore che incontra...

    Riuscite ad aiutarmi a semplificare questo codice?
    Grazie
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    La prima cosa che mi viene in mente, e si rivela sempre non essere la migliore, è

    codice:
    SELECT * FROM (
        SELECT * FROM corrieri ORDER BY corr_nome, corr_spedizione desc
    ) as TabOrd group by corr_nome
    che ti restituisce

    codice:
    id_corr	corr_nome	corr_spedizione
    3	GLS		500601
    4	SDA		698201
    rispetto alla tabellina che hai postato.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    grazie Grino. La premessa che hai scritto mi ha fatto sorridere, e ci voleva proprio.
    Per quanto riguarda la soluzione che mi hai suggerito, mi sembra di capire che però non recupera l'ultimo id inserito di ogni corriere.

    Con le query sono un pò "nemico" perchè non riesco a capire quante risorse richiedano.
    Provo quanto mi hai suggerito, ma se potessi avere almeno un'altra alternativa sarei più tranquillo.
    intanto grazie!!!
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    prova con

    $sql2= "
    SELECT * FROM corrieri WHERE id_corr =(SELECT MAX(id_corr) as pippo
    FROM corrieri WHERE corr_nome = 'GLS')";

  5. #5
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    GRAZIE STABI!!!! è perfetta!
    l'ho provata e fa esattamente quello che desidero!
    grazie veramente!!!
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Originariamente inviato da Airfry
    grazie Grino. La premessa che hai scritto mi ha fatto sorridere, e ci voleva proprio.
    Per quanto riguarda la soluzione che mi hai suggerito, mi sembra di capire che però non recupera l'ultimo id inserito di ogni corriere.

    Con le query sono un pò "nemico" perchè non riesco a capire quante risorse richiedano.
    Provo quanto mi hai suggerito, ma se potessi avere almeno un'altra alternativa sarei più tranquillo.
    intanto grazie!!!
    No, non recupera l'ultimo id ma l'ultima sped_corr per ogni corriere, non avevo letto bene: se vuoi l'elenco degli id_corr massimi per ogni corriere, senza nulla togliere alla stabi solution, basta fare

    codice:
    SELECT * FROM (
        SELECT * FROM corrieri ORDER BY corr_nome, id_corr desc
    ) as TabOrd group by corr_nome
    e ottieni l'elenco degli id più grandi per ogni corriere con la relativa spedizione senza dover ripetere la query per ogni corriere.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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.