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

    [MSSQL] problema omonimia campi con join

    Ciao a tutti,

    sto lavorando in PHP 4 con un DB microsoft SQL SERVER.
    Purtroppo lo str... hem :rollo: il simpaticone che ha progettato la base di dati ha deciso di chiamare moltissimi campi con lo stesso nome su tabelle diverse.

    Quindi se faccio una inner join fra FATTURE e ANAGRAFICHE avrò 2 campi con lo stesso nome (nel mio caso ID).

    il problema salta fuori nel momento in cui leggo i dati dalla classica variabile $row .
    Se faccio riferimento a
    $row[ID]
    non mi ritorna niente, in quanto il db non sa quale dei 2 campi prendere . Sono costretto quindi ad leggere i dati con il numero del campo , esempio
    $row[12]
    se so che l'ID delle FATTURE è il 12mo campo. ovviamente questa soluzione è pessima, in quanto se mi modificano la struttura della base di dati dovrei rimettere mano al codice!

    Esiste un'altro modo per riferirsi ad una colonna se c'e' un nome duplicato quando lavoro con database MSSQL SERVER?

    grazie!


  2. #2
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Puoi rinominare il campo nella query:

    SELECT CAMPO AS NOMECHEVUOI

    Poi lo richiami con NOMECHEVUOI.

  3. #3
    si ma non ho sempre lo stesso problema? se il campo è omonimo...
    Vediamo se mi spiego meglio con un esempio (semplificato al max):
    2 tabelle da joinare con 2 campi a testa

    tab: Fatture
    - ID
    - Importo

    tab: Anagrafica
    - ID
    - NomeCognome

    come scriveresti la query?

    cmq dovrei dichiararmi tutti i campi (che 2..)esiste il modo per usare l'asterisco e per rinominare solo i campi che mi interessano?

    Grazie 1k per le risp!


  4. #4
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    select fatture.id as idfatture, angrafica.id as idanagrafica, anagrfica.*, fatture.* ...

    l'id di fattur lo richiami con il nome idfatture, l'id di angrafica lo richiami con idanagrafica. Usando l'asterisco per comodità, ti richiamerà di nuovo i due id ma tu non li consideri.

  5. #5
    fantastico ho risolto (Grazie 1000 mi hai messo sulla buona strada lol ^^ ), si puo' usare l'asterisco e dopo la virgola rinominare i campi che servono. L'importante è rispettare la sintassi di SQLSERVER e creare degli alias per le tabelle, altrimenti con il nome non funziona na bega!
    Ecco la mia query di esempio, in caso serva a qualcuno con lo stesso tipo di problemi

    $msquery = "select *, fatt.Indirizzo AS pippo from [Pratiche] prat INNER JOIN [Fatture] fatt ON (prat.ID = IDPratica) INNER JOIN [Ragioni Sociali] rag ON (IDRagioneSociale = rag.ID) WHERE Fatt.ID='123' ";

    Edit : abbiamo postato assieme ^^


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.