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

    [sql]selezionare numero record dalla prima tabella che non sono nella seconda tabella

    il titolo dice già tutto


    io ho una tabella clienti e una tabella pratiche. Nella tabella clienti ci sono le molteplici richieste che i clienti stessi inviano ad una agenzia, quando una richiesta viene accettata viene trasformata in pratica e quindi inserita nella tabella pratiche...pur rimanendo anche nella tabella segnalazioni, in modo da poter vedere da che segnalazione nasce una certa pratica.

    Nelle segnalazioni ho come chiave id_cliente (autoincrement) che è anche chiave esterna nella tabella pratiche (con il nome di SEGNALAZIONE_WEB_ID); quello che vorrei ottenere io è appunto il numero (o l'elenco fate vobis) delle segnalazioni che non hanno un corrispondente nelle pratiche.

    tenete conto che non posso fare subqueries...
    ve lo chiedo anche perché, se possibile, vorrei usare una sola query.



    Grazie per ogni eventuale aiuto!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    nessuno sa darmi una mano?


    per ora l'ho fatto usando due query, ma in questo modo mi si sballa l'ordinamento...perché devo ordinare in base alla somma dei due campi e con 2 query non lo posso fare, o meglio lo posso fare ma devo fare un altro passaggio intermedio di mettere i risultati in un array e ordinare quello secondo il campo che mi interessa, e visto che i campi non sono pochi rischio di metterci un'eternità a caricare la pagina. (e per di più non so neanche da che parte cominiciare per farlo)





    a risentirci...spero
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  3. #3
    ok! a fondere i risultati delle 2 query in un array ci sono riuscito.
    ora il mio problema è fare l'ordinamento in base al campo che vogliono loro (che potrebbe essere qualsiasi). Il mio array ha una struttura del genere:
    codice:
    Array
    (
        [0] => Array
            (
                [AGENZIA_SUB] => ALESSANDRIA
                [numero] => 1
                [importo] => 11904
                [provvigione] => 416.64
                [in_essere] => 1
                [annullate] => 0
                [liquidate] => 0
                [confermate] => 1
                [da_approvare] => 0
                [totale] => 1
            )
    
        [1] => Array
            (
                [AGENZIA_SUB] => BOLOGNA
                [numero] => 6
                [importo] => 46920
                [provvigione] => 959.7
                [in_essere] => 1
                [annullate] => 4
                [liquidate] => 1
                [confermate] => 0
                [da_approvare] => 0
                [totale] => 6
            )
    
        [2] => Array
            (
                [AGENZIA_SUB] => BUSTO ARSIZIO
                [numero] => 1
                [importo] => 0
                [provvigione] => 0
                [in_essere] => 1
                [annullate] => 0
                [liquidate] => 0
                [confermate] => 0
                [da_approvare] => 2
                [totale] => 3
            )
    
        [3] => Array
            (
                [AGENZIA_SUB] => CUNEO
                [numero] => 1
                [importo] => 0
                [provvigione] => 0
                [in_essere] => 1
                [annullate] => 0
                [liquidate] => 0
                [confermate] => 0
                [da_approvare] => 0
                [totale] => 1
            )
    ...
    quindi come si capisce è un array bidimensionale in cui ogni elemento ha sempre la stessa struttura. Ad esempio io come faccio ad ordinare secondo il campo totale?

    sto guardando le varie funzioni di ordinamento per gli array, ma anche a costruirmente una al momento non riesco.



    qualsiasi aiuto è ben accetto!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    non ho le tabelle da valutare.

    Posso solo segnalarti come fare. In una tabella ci sono tutti i record, nella seconda solo alcuni. Tu vuoi trovare i record della prima tabella che non hanno corrispondenze nella seconda.

    Devi fare un left(o right) JOIN. Dipende da come imposti la query.
    es.:
    codice:
    SELECT *
    FROM segnalazioni s    /* tabella LEFT*/
    LEFT JOIN pratiche p ON p.SEGNALAZIONE_WEB_ID = s.id   
    WHERE p.SEGNALAZIONE_WEB_ID IS NULL
    ORDER BY ...
    in questo modo ti vengono resi i records di s dove l'id risulta NULL nella tabella p.

    prova.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Originariamente inviato da piero.mac
    non ho le tabelle da valutare.

    Posso solo segnalarti come fare. In una tabella ci sono tutti i record, nella seconda solo alcuni. Tu vuoi trovare i record della prima tabella che non hanno corrispondenze nella seconda.

    Devi fare un left(o right) JOIN. Dipende da come imposti la query.
    es.:
    codice:
    SELECT *
    FROM segnalazioni s    /* tabella LEFT*/
    LEFT JOIN pratiche p ON p.SEGNALAZIONE_WEB_ID = s.id   
    WHERE p.SEGNALAZIONE_WEB_ID IS NULL
    ORDER BY ...
    in questo modo ti vengono resi i records di s dove l'id risulta NULL nella tabella p.

    prova.
    Intanto grazie mille per la risposta


    Quello l'avevo valutato e provato, ma il problema e che poi devo dare la possibilità all'utente di selezionare il tipo di ordinamento che vuole e quindi la strada di buttarmi tutto in un array mi sembrava ottimale...se solo sapessi come ordinarlo

    con quella query ottengo solo l'elenco delle segnalazioni che non hanno corrispondenze fra le pratiche. Ma a me serve un conteggio complessivo (mi rendo conto che sto spiegando da cani, chiedo scusa, ma spiegare cose complesse scrivendo è piuttosto difficilotto).

    Per ottenere quello che voglio ora mi manca solo un passaggio, che è proprio quello di far ordinare quell'array in base ad una determinata chiave.

    sto tentando di costruirmi una funzioncina, ma non ci riesco. L'array che ho sopra è quello complessivo, con tutti i conteggi di cui ho bisogno...conosci mica una qualche funzione che fa al caso mio?
    mi sto leggendo in lungo e in largo php.net nella seziona Array, ma per ora non trovo nulla...e a scriverla sono arrivato ad un punto morto:

    codice:
    function sortedArray(&$arr, $key){
    	$newArr=array();
    	$min=$arr[0][$key];	// fisso il primo minimo come primo elemento
    	if(sizeof($arr)==0 || $key=="")	return false;
    	for($i=0;$i<sizeof($arr)-1;$i++){
    		foreach($arr[$i] as $k=>$v){
    			$aus=$arr[$i][$key];
    			if ($aus<$min)	$min=$aus;
    		}
    	}
    }
    e non sono nemmeno tanto sicuro che quello che ho scritto fino ad ora vada bene.









    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    Fai una UNION.

    in una SELECT prendi i record riferiti e con l'altra quelli non riferiti...

    Non ho simpatia per l'ordinamento su array. Lo considerei solo come extrema ratio...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    il problema è che in una ho delle colonne che nell'altra non possono esistere..tipo in pratiche ho colonne tipo montante e importo che nell'altra non esistono. Quindi non capisco come fare la UNION, ho letto su mySQL che i due rsultati devono avere lo stesso numero di colonne, cosa che con le mie tabelle non avranno mai.

    perché dici che è una brutta soluzione l'ordinamento dell'array?
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    il numero delle colonne e' lo stesso. Semplicemente dove mancano i dati questi risulteranno NULL.

    Prova anche solo con phpmyadmin.

    Non ho detto "brutto" ho detto che non ho simpatia. Fare degli ordinamenti per un RDBMS e' nell'ordine naturale delle sue motivazioni di esistere.



    opps... per le colonne mancanti ... aggiungile.

    SELECT *, '0', 'nulla'
    from

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    ciao piero! c'ho provato con le UNION ma non sono riuscito a ricavare ciò che volevo, anche solo da PMA.

    Per ora ho "temporeggiato" usando l'ordinamento degli array con una funzioncina che ho trovato su php.net un po' riadattata, e sembra funzionare benone.

    comunque ora mi studio le UNION che già in passato mi avrebbero potuto risolvere certi problemi ma che non ho mai capito e non sono mai riuscito ad utilizzare! lol!


    Grazie comunque per gli aiuti!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  10. #10
    ah...rileggendo mi sono reso conto di aver dimenticato la funzione!

    per chi fosse interessato è qui: http://it.php.net/manual/it/function...sort.php#61334


    ce ne sono anche altre, ma non sono riuscito a farle funzionare
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.