Primary key da rezultate duble intr-un lEFT JOIN.

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Moderatori: Zamolxe, Moderatori

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Primary key da rezultate duble intr-un lEFT JOIN.

Mesajde quadmachine » Joi Aug 23, 2012 1:14 am

Deci daca folosesc urmatoarea comanda in phpmyadmin la SQL.

Cod: Selectaţi tot

SELECT referali . * , members . *
FROM referali
LEFT JOIN members ON referali.ref_name = members.name
WHERE members.member_group_id = '3'
AND referali.member_id = '139'


Imi afiseaza rezultate duble desi un primary key nu are cum sa existe de 2 ori.
Print: http://i48.tinypic.com/x1x3k8.jpg

Si in baza de date ii dau sa imi ordoneze ASCENDENT,ies din phpmyadmin si cand ma loghez din nou ii arata tot dezordonati 20,1124,56,89,73.Deci pot face intr-un fel sa resetez primary key fara sa dau TRUNCATE la tabela.Sau daca stiti alta metoda o incerc cu cea mai mare placere.:D


Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Joi Aug 23, 2012 1:21 am

incearca INNER JOIN vezi diferenta
daca nu e ok, poti pune group by referal_id

[offtopic]
ma amuza de fiecare data semnatura ta, cica plateste instant de la 0$ :)) plateste 0,00 $ instant? :)) vreau si eu un cec cu valoarea asta :P
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

hadyh
Average Member
Mesaje: 118
Membru din: Mar Noi 30, 2010 12:57 pm

Mesajde hadyh » Joi Aug 23, 2012 12:29 pm

nu-l ajuta inner join o sa aibe acelasi rezultat pentru ca tu conditia de join nu o faci pe primary key si este normal ca pentru fiecare rezultat sa-ti faca match cu tot ce gaseste in cealalta parte.
iar cu group by o sa piarda si info.

LE : ai duplicate values in prima tabela pe coloana de join, adica referali.ref_name. ia ruleaza selectul :
select count(*) as test from referali group by referali.ref_name having test>1

sunt curios ce-ti returneaza

Reventon
Average Member
Mesaje: 68
Membru din: Lun Ian 31, 2011 5:07 pm

Mesajde Reventon » Joi Aug 23, 2012 1:49 pm

in cazul de fata, comanda ta creeaza un tabel nou, care nu respecta indexul din members.
acest tabel temporar nu are index primary, decat daca il creezi special.


iti apare aceasta dublura deoarece ai dat left join si automat gruparea se face dupa alte criterii.
poti sa grupezi dupa alte criterii, gen : GROUP BY referal_id
cel mai bine ar fi sa nu mai folosesti wildcard, ci sa numesti campurile pe care vrei sa le selectezi
ex: SELECT referal_id, member_id, id_ref ... etc


am mai scris un mesaj asemanator, sper sa te ajute
http://www.phpromania.net/forum/viewtop ... ht=#142600

ADAUGAT: sper ca am inteles bine ce ai vrut sa scrii, daca nu, te rog sa imi dai mai multe detalii

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Joi Aug 23, 2012 2:12 pm

Functioneaza asa dar in pagina imi arata alte rezultate.

Cod: Selectaţi tot

SELECT referali.referal_id, referali.member_id, referali.ip_ref, members.name, members.ip_address, members.email
FROM referali
LEFT JOIN members ON referali.ip_ref = members.ip_address
WHERE members.member_group_id = '3'
AND referali.member_id = '156'
GROUP BY referali.ip_ref

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Reventon
Average Member
Mesaje: 68
Membru din: Lun Ian 31, 2011 5:07 pm

Mesajde Reventon » Joi Aug 23, 2012 2:24 pm

dublura de la referal_id, este creeata de a doua coloana member_id.
ai 2 coloane de member_id care reprezinta lucruri diferite.
ar trebuie sa le identifici corect, dand un nume concret coloanei, gen :

SELECT referali.member_id AS id_referal, members.member_id AS id_membru ...


ADAUGAT:
daca ai 2 indexuri identice, pot aparea confuzii la citirea in php

ex:

Cod: Selectaţi tot

<?php

$a = array(
   'member_id' => 100,
   'member_id' => 150
);
echo 'id-ul este' . $a['member_id'];

?>

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Joi Aug 23, 2012 2:34 pm

Am rezolvat pana la urma,era corecta ultima solutie numai ca am scris eu gresit in functie.Daca am "MySQL Disk Space :23.65 MB" si o baza de date depaseste acest spatiu alocat este posibil sa am probleme cu tabelele?:-?

Aseara la tabela referali imi afisa cu rosu la space usage.

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Reventon
Average Member
Mesaje: 68
Membru din: Lun Ian 31, 2011 5:07 pm

Mesajde Reventon » Joi Aug 23, 2012 2:55 pm

banuiesc ca te referi la spatiul total de pe HDD (partitie).
nu prea pot sa te ajut aici, nu m-am lovit de asa ceva.

dar stiu ca o baza de date se extinde cu fiecare insert.
cand nu o sa mai ai spatiu disponibil pe HDD, nu o sa mai introduca linii in tabel.
si mai mult ca sigur o sa apara si utilizatorilor asta, daca ai setat sa arate mysql_error()

poti sa arunci o privire si aici
http://dev.mysql.com/doc/refman/5.0/en/full-disk.html

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Joi Aug 23, 2012 2:59 pm

tot ce poti sa faci e sa vb cu hostul sa iti mareasca spatiul pentru sql, altfel nu vei mai putea introduce alte randuri in acel tabel o sa iti dea mesaj de eroare cu spatiu depasit.
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Joi Aug 23, 2012 3:11 pm

Asta am sa fac,multumesc de raspuns. Dau o bere virtuala :P

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Joi Aug 23, 2012 3:16 pm

quadmachine scrie:Asta am sa fac,multumesc de raspuns. Dau o bere virtuala :P


un fost membru al comunitatii are un site de unde poti da beri virtuale ;)

http://giveabeer.com/ (vezi sa nu imbeti toti membrii ca nu mai are cine sa modereze :P )
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Joi Aug 23, 2012 6:54 pm

Deci asta este prea tare si costa putin ;)).

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.


Înapoi la “MySQL”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 13 vizitatori