| 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 |
|
| |