Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

selectie multipla
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Subiectul anterior :: Subiectul următor  
Autor Mesaj
wild warrior



Data înscrierii: 21/Aug/2008
Mesaje: 7

Trimis: Joi Aug 21, 2008 8:37 am    Titlul subiectului: selectie multipla  

sal,
am urmatorul caz:
- am trei tabele clienti, contracte si modificari contracte dupa cum urmeaza:

tb01 = contracte_mod AS cm (tabelul de modificari contracte)
fields: cm.id, cm.date, cm.new_id, cm.old_id
unde
cm.id = c.id
cm.new_id = cl.id (nou) si cm.old_id = cl.id (vechi)

tb02 = contracte AS c (tabelul de contracte)
fields: c.id, c.name, c.id_cl
unde
c.id_cl = cl.id

tb03 = clienti AS cl (tabelul de clienti)
fields: cl.id, cl.name

- dupa cum se vede, in tb01 apar doua coloane de id-uri preluate din tb03 (clienti)

INTREBARE
care este sql-ul astfel incat sa afisez intr-un tabel asemanator cu tb01 dar cu coloanele: c.name, cm.date, c.new_name, c.old_name, c.new_name fiind c.name corespondent lui cm.new_id si c.old_name corespondent lui cm.old_id ?
datele trebuiesc preluate in ordinea tb01 <- tb02 <- tb03 avand in vedere ca npul tabel afisat este raportat la contracte

multumesc anticipat

PS
daca nu se intelege ceva, va rog sa-mi cereti info suplimentare
Sus  
ShD



Data înscrierii: 19/Noi/2007
Mesaje: 119
Locație: Iasi

Trimis: Dum Aug 24, 2008 12:18 pm    Titlul subiectului:  

poti incerca ceva de genul dar extins. daca nu reusesti revina cu un raspuns sa iti postez tot queryul ca acum is on the run.

Cod: SEECT cm.stuff, c.otherstuff from contracte_mod cm LEFT JOIN contracte c ON cm.id = c.id
Sus  
wild warrior



Data înscrierii: 21/Aug/2008
Mesaje: 7

Trimis: Dum Aug 24, 2008 7:45 pm    Titlul subiectului:  

multumesc pt raspuns dar nu este suficient

eu am facut asa:
Cod:
SELECT * FROM ((cm LEFT JOIN c ON cm.id = c.id) LEFT JOIN cl ON c.id = cl.id) ORDER BY cl.id ASC


problema este ca nu stiu cum sa-mi apara cl.name corespondent lui cm.new_id si cl.name corespondent lui cm.old_id avand in vedere ca trebuie sa se treca cu cautarea de doua ori prin tabelul cl si sa se afiseze cate un nume la fiecare id (cm.new_name = cu un cl.id si in acelasi tabel, cm.old_name = cu un alt cl.id) deoarece contractele au trecut de la un client la altul fiecare cu id-ul si numele diferit, aceste id-uri si nume fiind preluate din tableul cl
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Lun Aug 25, 2008 9:04 am    Titlul subiectului:  

in primul rand (mai ales cand lucrezi impreuna cu altii la o problema), renunta la alias-urile alea cu cl, cm si c. E mai usor pentru noi sa intelegem la ce tabela te referi, deci in continuare voi folosi numele de tabela complet.

Acum, query-ul tau se face asa: Cod:
SELECT
  contracte_mod.id,
  contracte_mod.date,
  clienti_old.name AS old_name,
  clienti_new AS new_name
FROM contracte_mod
  LEFT JOIN (contracte AS contracte_old
    INNER JOIN clienti AS clienti_old
    ON contracte_old.id_cl = clienti_old.id
  )
  ON contracte_mod.old_id = contracte_old.id
  LEFT JOIN (contracte AS contracte_new
    INNER JOIN clienti AS clienti_new
    ON contracte_new.id_cl = clienti_new.id
  )
  ON contracte_mod.new_id = contracte_new.id
Practici faci doua LEFT JOIN-uri pe aceeasi tabela (care e de fapt un INNER JOIN intre contracte si clienti), insa pentru a le diferentia folosesti alias-uri pe tabela (tabela AS alias).

Nu l-am testat, dar teoretic ar trebui sa mearga.
Sus  
wild warrior



Data înscrierii: 21/Aug/2008
Mesaje: 7

Trimis: Mie Aug 27, 2008 9:47 am    Titlul subiectului:  

ca urmare a observatiei corecte a lui mihaitha, voi repeta conditiile, mai ales ca in ultimul raspuns primit nu apare o coloana de care am nevoie (contract_name)

===============================================
contracte_mod
| contract_id | contract_date | new_client_id | old_client_id |

(nu exista key, avand in vedere ca in acest tabel pot apare aceleasi contracte_id de mai multe ori schimbandu-si clientul)
-------------------------------------------------------------------------------------
contracte
| contract_id | contract_name | client_id |
key = contract_id
-------------------------------------------------------------------------------------
clienti
| client_id | client_name |
key = client_id
-------------------------------------------------------------------------------------

RELATII INTRE TABELE
contracte_mod.contract_id = contracte.contract_id
contracte.client_id = clienti.client_id

===============================================

REZULATUL DORIT

tabel
| contract_id | contract_date | contract_name | new_client_name | old_client_name |

===============================================

- problema mea nu este cu afisarea primelor doua coloane

"SELECT
contracte_mod.contracte_id, contracte_mod.contract_date,
contracte.contract_id, contracte.contract_name
FROM contracte_mod LEFT JOIN contracte
ON contracte_mod.contract_id = contracte.contract_id
ORDER BY contracte_id ASC"

rezultand
tabel
| contract_id | contract_date | contract_name |

- problema mea este ca in continuarea acestui tabel, in alte doua coloane, trebuie sa afisez new_client_name si old_client_name aferente new_client_id si old_client_id

multumesc pentru raspunsuri, astept unul care sa ma ajute
Sus  
wild warrior



Data înscrierii: 21/Aug/2008
Mesaje: 7

Trimis: Dum Aug 31, 2008 8:02 pm    Titlul subiectului:  

am primit o rezolvare pe care o afisez aici fiind poate de folos si altcuiva

Cod:
SELECT a.contract_id,a.contract_date,b.contract_name,

(SELECT c.client_name FROM clienti c WHERE c.client_id=a.new_client_id)
client_nou,
(SELECT c.client_name FROM clienti c WHERE c.client_id=a.old_client_id)
client_vechi

FROM contracte_mod a, contracte b WHERE a.contract_id=b.contract_id
ORDER BY a.contract_id,a.contract_date;
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community