Prendere valori da una tabella e concatenarli ad un altra...

Emix

Utente Attivo
15 Feb 2010
594
0
16
Salve a tutti,
ho un problema che sembra facile da risolvere ma non ne vengo a capo...
Io uso PHP e sto creando una struttura di clienti con destinazioni diverse...

Ho fatto due tabelle:

Tabella clienti:

clienti.png

Tabella sedi:

sedi.png

Come potete vedere il campo in comune che hanno è piva (partita iva)...
A me servirebbe riuscire ad estrapolare le eventuali sedi diverse del cliente.. Poi le varie ubicazioni e la sede verranno messe dentro una select...
Ho provato ad usare questa query ma non mi restitituisce nulla:

Codice:
SELECT * FROM clienti as c LEFT JOIN sedi as s ON s.piva = c.piva WHERE s.piva = c.piva;
Sbaglio io qualcosa?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
prova così, al massimo non funzia
PHP:
$query="SELECT from clienti as c, sedi as s WHERE s.piva = c.piva";
e se vuoi per un particolare ckiente
PHP:
$query="SELECT from clienti as c, sedi as s WHERE s.piva = c.piva AND c.ragione='$da_post'";
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Ciao ho provato come mi hai scritto te... ma mi restituisce errore nell'esplosione delle righe...
metto la pagina intera e posto errore:


PHP:
<?php
session_start();
include('connect.php');
$cliente=$_POST['ragione'];
$ctrl_cliente = @mysql_query("SELECT * FROM clienti WHERE ragione='$cliente'") or die (mysql_error());
                if(@mysql_num_rows($ctrl_cliente)>0)
                {
			    $_SESSION['id'] = $id;
				}
$query = mysql_query("SELECT from clienti as c, sedi as s WHERE s.piva = c.piva AND c.id='$id'");  
    $righe = mysql_fetch_array($query); // qui mi da l'errore... ossia la riga 11
	$ragione=$righe['ragione'];
	$ragione2=$righe['ragione2'];
	$indirizzo=$righe['indirizzo'];
	$cap=$righe['cap'];
	$citta=$righe['citta'];
	$pr=$righe['provincia'];
	$piva=$righe['piva']; 
	$ubicazione=$righe['ubicazione1'];
	$citta1=$righe['citta1'];
	$indirizzo1=$righe['indirizzo1'];
	echo "Ragione Sociale:".$ragione."<br>";
	echo "Ragione Sociale2:".$ragione2."<br>";
	echo "Indirizzo:".$indirizzo."<br>";
	echo "Cap:".$cap."<br>";
	echo "Citta:".$citta."<br>";
	echo "Provincia:".$pr."<br>";
	echo "P.Iva:".$piva."<br>";
	echo "Ubicazione diversa:".$ubicazione."<br>";
	echo "Citta diversa:".$citta1."<br>";
	echo "Indirizzo diverso:".$indirizzo1."<br>";
	
?>

Codice:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/laviadellanima.com/public_html/pdf/provadb.php on line 11
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
ci sono riuscito... La query giusta è :

PHP:
<?php
$query = mysql_query("SELECT * FROM clienti as c LEFT JOIN sedi as s ON s.piva = c.piva WHERE s.piva='$piva'");
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ho provato ad usare questa query ma non mi restitituisce nulla:
Codice:
SELECT * FROM clienti as c LEFT JOIN sedi as s ON s.piva = c.piva WHERE s.piva = c.piva;
Sbaglio io qualcosa?
va senza la WHERE
Codice:
SELECT * FROM clienti as c LEFT JOIN sedi as s ON s.piva = c.piva
io preferisco questa sintassi per le join ma fa la stessa identica cosa della tua
Codice:
SELECT *
FROM clienti c
JOIN sedi s USING (piva)
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
se io una volta trovate le varie sedi... le volessi mettere dentro una select e passare in sessione quelle scelte come potrei fare?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
dici che non funzia, ma da dove salta fuori quell'id
$query = mysql_query("SELECT from clienti as c, sedi as s WHERE s.piva = c.piva AND c.id='$id'");
io la uso regolarmente (non con i clienti ma per altre cose)
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
l'ho cambiata, era errata.... funzionava anche la tua chairamente... ora ho il problema di spedire i valori dentro una select e passare in sessione quella selezionata....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
non capisco che dato/i vuoi mettere in una select? (innagino <select>...</select> ?)
poi mi è venuto un piccolo dubbio guardando la tua seconda tabella: e se il cliente ha 5 sedi?
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
allora al max il cliente ha 3 sedi... il problema è che vorrei emttere dentro la select le sedi del cliente selezionato... Esempio

Opzione 1 inidrizzo1 cap1 citta1
Opzione2 Indirizzo2 cap2 citta2
Opzione 3 Indirizzo3 cap3 citta3

Ma chiaramente devono essere lette dal db.. La lettura l'ho fatta non capisco come passare in sessione una delle tre opzioni selezionate tramite select...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ora ti confondo un po le idee
Avrei strutturato la tabella in modo diverso:
non ubicazione1 2 3 citta 1 2 3 ma solo un campo ubicazione e uno citta e cosi per gli altri
se un azienda ha piu ubicazioni non fai altro che inserire piu righe (uno per ogni ubicazione diversa)
PHP:
<?php

$query = "SELECT id,ubicazione
                FROM clienti c
                JOIN sedi s USING (piva)
                WHER c.piva='$piva'";
$result = mysql_query($query);
echo "<select>";
while ($row = mysql_fetch_assoc($result)) {
    echo "<option value='" . $row['id'] . "'>" . $row['ubicazione'] . "</option>";
}
echo "</select>";
?>
Il consiglio in ogni caso è di abbandonare l'estensione mysql e abituarti ad usare almeno la mysqli
purtroppo non sappiamo quando ma prima o poi saremmo costretti a non usarla piu
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non molto non preoccuparti
non è necessario conoscere la programmazione ad oggetti, puoi usare mysqli nello stesso modo con cui usi mysql
molte funzioni sono uguali
mysql_query è uguale a mysqli_query
e cosi per molte altre, sempre che non decidi di programmare ad oggetti
solo che l'estensione mysql , piu che altro per problemi di sicurezza, è stata deprecata
dai un occhiata al manuale ( ora non riesco a linkartelo)
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
capito dopo do uno sguardo... Nel mentre a parte la confusione che mi hai generato addosso asd, mi aiuti a capire come fare per mettere in una select le opzioni e passare in sessione la selezionata pls??
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
se proprio non puoi ristrutturare la tabella una possibile orrenda soluzione potrebbe essere questa
PHP:
echo "<select>";
echo "<option value='1;" . $row['id'] . "'>" . $row['ubicazione1'] . "</option>";
echo "<option value='2;" . $row['id'] . "'>" . $row['ubicazione2'] . "</option>";
echo "<option value='3;" . $row['id'] . "'>" . $row['ubicazione3'] . "</option>";
echo "</select>";
in sessione ti ritroverai una stringa composta dal numero di ubicazione e dall'id della sede
PHP:
$_SESSION['sede'] = "1;58";
dovrai esploderla per poterla usare
sicuramente ci saranno altre soluzioni
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
forse non mi riesco a spiegare io... ecco perche, rileggendo il tuo post sopra noto che non mi son spiegato...

Allora Io ho una tabella clienti, in questa tabella ho tutte le informazioni che mi servono per far si che in un DDT e/o fattura io possa tranquillamente fare il documento compilando automaticamente i campi da me richiesti...

La tabella Sedi (che forse è meglio se rinomino ubicazioni) non è altro che un contenitore dove ci vado a mettere le varie destinazioni del cliente GIA INSERITO. Per far si che questo cliente venga riconosciuto uso come campo in comune la partita iva (che per legge è UNIVOCA).
A questo punto inserendo un cliente base :

Ragione sociale = Pippo srl
Indirizzo = via roma,1
Cap = 00100
Citta = Roma
Provincia = RM
Piva = 12345678901

Ho tutto per far si che compilo il documento, ma quando devo fare un ddt ed il cliente in questione ha sede legale via roma, 1 00100 roma RM e UBICAZIONE di Esercizio a Via firenze,1 00001 Firenze FI devo poter mettere la destinazione diversa. Ora in questo caso ho una sola ubicazione diversa, la inserisco nella tabella sedi e ottendo :

Indirizzo1 = Via Firenze,1
Citta1= Firenze
Cap1= 00001
Provincia1= FI
Piva=12345678901

Ora, se sto compilando un documento, e selezionando il cliente mi accorgo che ha una destinazione diversa, deve apparire una select dove trovero:

Via roma,1-00100-Roma-RM
Via Firenze,1-00001-Firenze-FI

E selezionando quella di mio interesse passi in sessione i 4 valori, cosi che nella pagina seguente li recupero e creo DDT e/o Fattura...
Mi sono spiegato meglio ora credo...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
allora forse ti conviene evitare la JOIN: fai una select diretta nella tabella ubicazioni where piva = $piva se trovi uno o piu risultati mostri la <select> con un while come ti ho fatto vedere nel post sopra
nella pagina sucessiva ricevendo l'id in sessione fai un altra select mirata sulla tabella ubicazioni per recuperare indirizzo cap citta etc
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
no perche gli id della tabella sedi e quelli della tabella clienti sono diversi.. unico campo uguale è la partita iva...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
PHP:
<?php
$query = "SELECT id,ubicazione
                FROM sedi 
                WHER piva='$piva'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
    echo "<select>";
    while ($row = mysql_fetch_assoc($result)) {
        echo "<option value='" . $row['id'] . "'>" . $row['ubicazione'] . "</option>";
    }
    echo "</select>";
}
?>
nel value avrai l'id della tabella sedi , non puoi confonderti
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
quindi in questa maniera ho evitato la inner join selezionando direttamente le varie ubicazioni tramite select diretta? I numeri in sessione come li faccio diventare stringhe??