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
 

SELECT cu nabadai
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
ovib(e)



Data înscrierii: 18/Sep/2005
Mesaje: 10
Locație: Cluj

Trimis: Dum Sep 18, 2005 11:18 am    Titlul subiectului: SELECT cu nabadai  

Am fost nevoit sa preiau ceva baze de date de tip dbf. Le-am convertit in tabele mysql.

Tabelele sunt de forma:
Tabel_1: id_t1 | nr_obiect | catalogare
Tabel_2: id_t2 | cauta_catalogare | valoare_catalogare
Tabel_3: id_t3 | nr_ordine
Tabel_4: id_t4 | nr_user | nume_user
Tabel_5: id_t5 | cauta_nr_obiect | cauta_nr_ordine | cauta_nr_user | data

Ca sa am un output de forma:

nr_obiect, valoare_catalogare, nr_ordine, nume_user, data
(rezultat limitat la un nr. de 5, de ex.)

Necazul este ca, nr_user este un camp care contine mai multe valori (despartite cu virgula spatiu (aka 15, 21, 64 - > indicii userilor).

am scris comanda de mai jos (si e normal sa fie eronat la campul nume_user):

SELECT nr_obiect, valoare_catalogare, nr_ordine, nume_user, data FROM Tabel_5, Tabel_4, Tabel_3, Tabel_2, Tabel_1
WHERE (
(cauta_nr_obiect = nr_obiect)
AND
(cauta_catalogare = catalogare)
AND
(cauta_nr_ordine = nr_ordine)
AND
(cauta_nr_user = nr_user)
)
LIMIT 0, 5;


La ora actuala rezultatul este bun pentru celelalte campuri cu exceptia nume_user unde primesc invariabil primul numar din tabelul de nume_user.
Exista vreo functie sau combinatii de functii in MySQL cu care sa pot citi ca si array (sau altfel?!) cifrele din camp si apoi sa le gasesc corespondenta in tabelul cu nume_user?

Daca nu, ce alte solutii ar fi posibile?
Multumesc anticipat.[/u]
Sus  
programatori_php



Data înscrierii: 13/Sep/2005
Mesaje: 11

Trimis: Dum Sep 18, 2005 5:30 pm    Titlul subiectului:  

incearca sa folosesti functia fin_in_set, o cauti in manualul mysql sa vezi cum se foloseste, te scuteste de mule batai de cap
Sus  
pub



Data înscrierii: 02/Noi/2004
Mesaje: 13

Trimis: Dum Sep 18, 2005 6:49 pm    Titlul subiectului:  

Poti sa stochezi +nti datele care te intereseaza intr-un array si apoi sa-l folosesti.De ex;
<?

for ($i=0;$row=mysql_fetch_array($result);$i++)
{
$array[$i] = $row['id_t1'];
}
?>
In felul acesta stochezi toate datele din coloana 'id_t1' in $array, si apoi sa folosesti $array oriunde ai nevoie.
Sus  
ovib(e)



Data înscrierii: 18/Sep/2005
Mesaje: 10
Locație: Cluj

Trimis: Dum Sep 18, 2005 9:02 pm    Titlul subiectului: mai incerc o data (poate reusesc)  

Multumesc de solutii. Ceva nu am expus probabil prea clar.

Deci sa simplific treaba

Tabel_1 de forma:
Cod:
     id | nume_proiect | numere_persoane_implicate |data_incepere_proiect
ex    1 | Azorel       |  1, 15, 17                |21.05.2005
..........

Tabel_2 de forma:
Cod:
     id | numar_persoana_implicata | nume persoana implicata
ex     1|        1                 |  Georgevici Vasile
ex     2|       15                 |   Sandu Cristian
ex     3|       17                 |   Popescu George   
................

Ce solutii ar fi ca in output sa am rezultatul de mai jos?

Azorel | Georgevici Vasile, Sandu Cristian, Popescu George | 21.05.2005

Merci pentru rabdare si ajutor!
Sus  
carco



Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti

Trimis: Lun Sep 19, 2005 8:27 am    Titlul subiectului:  

Sa normalizezi tabelele alea!
Ce cauta 1, 15 17 intr-un camp pe care vrei sa-l folosesti intr-o relatie?

Mai fa o tabela cu id-proiect, nr-persoana-implicat in care o sa pui
Cod:
id | id_proiect   | numar_persoana_implicata
1 |  1            |  1
2 |  1            |  15
3 |  1            |  17
Sus  
ovib(e)



Data înscrierii: 18/Sep/2005
Mesaje: 10
Locație: Cluj

Trimis: Sâm Sep 24, 2005 11:48 pm    Titlul subiectului: alba-neagra  

Multumesc conasule de sfat. Am facut cum ai zis, un al treilea tabel.
Acum tabelele sunt:

Tabel_1: id | nume_proiect | numar_proiect |data_incepere_proiect
Tabel_2: id | numar_persoana_implicata_rezultat | nume_persoana_implicata
Tabel_3: id | id_proiect | numar_persoana_implicata

Necazul este mai departe, nu reusesc sa scot rezultatul urmator:
nume_proiect | nume_persoane implicate | data_incepere_proiect

desigur ca sunt mai multe persoane implicate (si diferite) in fiecare proiect

daca fac ceva de genul:
Citat:
SELECT nume_proiect, nume_persoana_implicata, data_incepere_proiect
FROM Tabel_1, Tabel_2, Tabel_3
WHERE (
(nr_proiect = id_proiect ) AND ( numar_presoana_implicata = numar_persoana_implicata_rezultat)
);

aplicatia ragaie minute in sir blocandu-mi un calculator destul de bun (sintaxa gresita/ sintaxa nepotrivita/greseli in sintaxa?!).

Poti sa ma lamuresti care va fi sintaxa completa la SELECT ?
Sus  
carco



Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti

Trimis: Dum Sep 25, 2005 9:09 am    Titlul subiectului:  

Pai ar trebui sa ai index pe numar_proiect in tabela 1, ,numar_persoana_implicata_rezultat in tabela 2, respectiv id_proiect in tabela 3.

ID-urile alea la ce-ti mai folosesc?
Sus  
ovib(e)



Data înscrierii: 18/Sep/2005
Mesaje: 10
Locație: Cluj

Trimis: Dum Sep 25, 2005 2:17 pm    Titlul subiectului:  

Conasule... m-ai lasat bezna; daca ma poti lamuri asupra sintaxei care ar trebui sa o folosesc in situatia actuala.. asta mi-ar fi de mare folos; mai exact CE SCRIU IN LINIA DE COMANDA...?
ID-urile?.. practic la mai nimic imi folosesc, dar nici nu ma incurca deocamdata.
Sus  
adahate



Data înscrierii: 26/Sep/2005
Mesaje: 3

Trimis: Lun Sep 26, 2005 3:43 pm    Titlul subiectului:  

daca am insteles eu bine selectul ar arata cam asa:
select nume_proiect,nume_pers_implicata,data_incepere_proiect
from tabel_2 d
join tabel_3 t on d.numar_pers_implicata=t.numar_pers_implicata
join tabel_1 u on u.id=d.id
asta in cazul in care asa sunt relatiile intre tabele.
daca nu merge asa inseamna ca nu am inteles eu si imi cer scuze ca m-am bagat in seama!
spor si o zi buna!
Sus  
carco



Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti

Trimis: Lun Sep 26, 2005 4:42 pm    Titlul subiectului:  

ovib(e) a scris: Conasule... m-ai lasat bezna; daca ma poti lamuri asupra sintaxei care ar trebui sa o folosesc in situatia actuala.. asta mi-ar fi de mare folos; mai exact CE SCRIU IN LINIA DE COMANDA...?
ID-urile?.. practic la mai nimic imi folosesc, dar nici nu ma incurca deocamdata.
Pai sintaxa care ai dat-o, dar sa ai indexi cum ti-am zis ca altfel o sa-ti ia procesoru foc pana o sa faca join-urile alea.
Ca sa creezi un index:
an style="color: #000000"><?php ALTER TABLE `nume_tabela` ADD INDEX ( `nume_coloana` ) 
sau (in mod normal ar tb. sa fie unice valorile din coloanele de care ti-am zis)
an style="color: #000000"><?php ALTER TABLE `nume_tabela` ADD UNIQUE ( `nume_coloana` ) 
Sus  
pub



Data înscrierii: 02/Noi/2004
Mesaje: 13

Trimis: Lun Sep 26, 2005 5:50 pm    Titlul subiectului:  

Poti executa SELECT id.tabel_1, id.tabel_2, id.tabel_3 etc., atunci cand ai nume identice la coloane din tabele diferite. Problema ta ar putea fi faptul ca fiecare tabel are un id iar baza de date nu este normalizata.
Sus  
Morrison



Data înscrierii: 06/Mai/2005
Mesaje: 68

Trimis: Mar Sep 27, 2005 12:29 am    Titlul subiectului:  

era mai simplu un rtfm
Sus  
ovib(e)



Data înscrierii: 18/Sep/2005
Mesaje: 10
Locație: Cluj

Trimis: Mar Sep 27, 2005 4:25 am    Titlul subiectului: in final....  

IN forma de mai jos am reusit...
Cod:
SELECT DISTINCT
  Tabel_1.nume_proiect,
  Tabel_2.nume_persoana_implicata
  Tabel_1.data_incepere_proiect
FROM
  Tabel_1
  INNER JOIN Table_3 ON (Tabel_1.numar_proiect = Tabel_3.id_proiect)
  INNER JOIN Tabel_2 ON (Tabel_2.numar_persoana_implicata_rezultat = Tabel_3.numar_persoana_implicata)
ORDER BY
  Tabel_1.nume_proiect

Multumesc de indicatii!
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