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

    Ciclo while con due query non va

    Ciao a tutti ho un problema con la gestione di due tabelle, spero di essere abbastanza chiaro.

    Ho due tabelle:
    "elenco_attivita", dove sono salvati tutti gli activity_ID e gli activity_name delle attività di tutte le aziende;
    "partner_attivita", dove sono raggruppati tutti gli activity_ID di ogni azienda.
    In sintesi devo estrapolare dalla seconda tabella (partner_attivita), tutti gli activity_ID di una sola azienda ed utilizzarli per ricavare dalla prima tabella (elenco_attivita) tutti gli id delle attività ESCLUSO quelli dell'azienda.
    Questo risultato mi serve per popolare una select in un form di modifica delle attività di una singola azienda. Per evitare di salvare due volte la stessa attività per la stessa azienda ho bisogno di una select che mi contenga l'elenco di tutte le attività disponibili ECCETTO quelle già salvate.

    Questa la query che ho utilizzato:
    Codice PHP:
    $qpartner_attivita DB_Query("SELECT * FROM $table4 WHERE company_ID = '$id'");
    while(
    $actID DB_Get_Results($qpartner_attivita))
    {
    $qattivita DB_Query("SELECT * FROM $table3 WHERE activity_ID != '$actID[0]'");
    while(
    $attivita DB_Get_Results($qattivita))
    {
    echo
    "$attivita[0]";//questo valore mi serve per la select
    }

    Il problema è che mi scrive tante volte quanti sono gli id estratti dalla prima query, il risultato della seconda query eliminando il valore della prima, ma uno alla volta.

    Qualcune sa dirmi dove sbaglio?
    forse è il ciclo while che è sbagliato?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    Non ho ben capito la struttura delle due tabelle...ma in generale se ti interessa estrarre da una tabella tutto quello che non è presente in un'altra ti basta fare :

    Select idxxxxxx
    Form Tabella1
    minus
    Select idyyyyy from tabella2
    where id_azienda = 'xx'

    In questo modo ti vengono fuori tutte le chiavi idxxxxx della tabella1 non presenti nella tabella2 (con il nome campo idyyyyyy)

    Se poi vuoi estrarre delle info in più dalla tabella1 devi fare una select in select del tipo :



    Select campo1,campo2,campon
    from tabella1
    Where idxxxxxx in ///e qua riporti il codice sopra
    (Select idxxxxxx
    Form Tabella1
    minus
    Select idyyyyy from tabella2
    where id_azienda = 'xx')

    A questo punto devi solo poi elaborare il risultato del cursore.
    Spero di esserti stato di aiuto.

  3. #3
    Ciao makikaz

    ti ringrazio per la risposta.
    In effetti non è semplice da spiegare, o meglio so cosa ho bisogno di trovare ma non so come spiegarlo.

    Comunque adesso provo e pio ti so dire.

  4. #4
    Cerco di essere più chiaro
    Codice PHP:
    TABELLA 1 ATTIVITA
    activity_ID 
    activity_name
    ------------------------------
         
    1         |  pentole
         2         
    |  padelle
         3         
    |  piatti
         4         
    |  forchette
         5         
    |  coltelli
         
    ...        | ecc...

    TABELLA 2 PARTNER_ATTIVITA
    activity_ID  
    |  company_ID
    ------------------------------
         
    2          |     11
         5          
    |     11
         3          
    |      2
         5          
    |      65
         4          
    |      11 
    L'azienda con ID 11 produce padelle(2), coltelli(5), forchette(4).
    L'azienda con ID 2 produce piatti(3)
    L'azienda con ID 65 produce coltelli(5)

    Queste le query:
    Codice PHP:
    // Con questa estrapolo tutti gli activity_ID della company_ID =11
    $q_partner_attivita DB_Query("SELECT * FROM tabella2 WHERE company_ID = '11'");
    while(
    $actID DB_Get_Results($q_partner_attivita))
    {

    //Mi restituisce tre valori: 2, 5, 4.
    //Ora dalla tabella 1 voglio estrapolare tutti gli activity_ID contenuti TRANNE quelli ottenuti dalla prima query

    $q_attivita DB_Query("SELECT * FROM $tabella1 WHERE activity_ID != $actID[0]");
    while(
    $attivita DB_Get_Results($q_attivita))
    {
    echo
    "$attivita[0]";
    }

    E qui nascono i problemi.
    Infatti mi stampa per tre volte il risultato della seconda query, dove ogni volta manca uno dei valori estratti dalla prima.
    Esempio:
    1 3 4 5 (manca il 2) 1 2 3 4 (manca il 5) 1 2 3 5 (manca il quattro)

    Io invece vorrei che mi stampasse una volta sola 1 3 (gli unici valori che non hanno corrispondenza)

    Sono due giorni che ci provo ma non riesco ad uscirne.

    Sapete darmi una mano?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    122
    Hai provato con il suggerimento che ti ho dato :

    Se scrivi

    Select activity_id
    from tabella_1
    minus
    Select activity_id
    from tabella_2
    WHERE company_ID = '11';

    In questo modo ti dovrebbe tirare fuori solo gli activity nr.1 e 3

  6. #6
    Non non funziona.
    Mi da una riga vuota.
    Ma io penso che sia un problema di cicli while.
    Infatti sono due while uno dentro l'altro.
    é per questo che mi stampa n volte il risultato (che preso singolarmente è giusto) quanti sono i record estratti dalla tabella2.

    Io vorrei cercare di raggruppare i risultato per non avere dei "doppioni"

    Ho provato anche con un if tipo:

    if(tabella1.activity_ID == tabella2.activity_ID) {

    }
    else
    {
    echo"$attivita[0]

    Non sò come fare!

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.