 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
saitek
Data înscrierii: 23/Sep/2007
Mesaje: 442
|
| Trimis: Vin Noi 23, 2007 8:51 pm Titlul subiectului: Inner JOIN |
|
|
Credeam ca rezolvasem,dar se pare ca nu..Nu am mai folosit nici o data JOIN,ce este gresit in query-ul meu.Need help disperat
Cod:
$query = mysql_query("SELECT * FROM `".$table."` WHERE `*` LIKE '%".mysql_escape_string($_POST['*'])."%' AND `anu_nasterii` = '$anulNasterii1' AND `anu_nasterii` = '$anulNasterii2' AND `tara` = '".$_POST['tara']."' AND `oras` = '".strip_tags($_POST['oras'])."' AND `pt_ce_cauta` LIKE '%".mysql_escape_string($_POST['cauta'])."%' INNER JOIN `poze` WHERE `useri`.`user_id` = `poze`.`user_id` AND `poze`.`poza_principala` = '1'");
Ce este cu * inseamna,lucrul ala ce il faci cu femeia :lol: |
|
| Sus |
|
saitek
Data înscrierii: 23/Sep/2007
Mesaje: 442
|
| Trimis: Sâm Noi 24, 2007 7:20 am Titlul subiectului: |
|
|
| really nobody se pricepe la JOIN :? |
|
| Sus |
|
carco
Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti
|
| Trimis: Sâm Noi 24, 2007 7:31 am Titlul subiectului: |
|
|
Pai pune si tu doar query-ul, nu-l mai amesteca cu php-ul ca sa putem citi si noi usor si, daca nu ti-e greu, ai putea sa ne dai si noua ce zice mysql_error (adica nu mai lucra orbeste, pune si tu mysql_query(....) or die(mysql_error());
Asa, revenind
Conditia de JOIN se pune folosind ON nu WHERE (nu vezi ca ai doua clauze where?)
Cod:
INNER JOIN `poze` ON `useri`.`user_id` = `poze`.`user_id` AND `poze`.`poza_principala` = '1'
Eu as muta (poze.poza_principala =1) in clauza where
SELECT ... FROM `useri` WHERE ..conditiile cu like .. AND poze.poza_principala = 1
INNER JOIN `poze` ON `useri`.`user_id` = `poze`.`user_id`
si, mai mult, as pune OUTER in loc de INNER (la INNER nu-ti vor fi scoase din useri randurile pt. care nu exista in poze o inregistrare cu useri.user_id = poze.user_id)
Cod:
SELECT ... FROM `useri` WHERE ..conditiile cu like .. AND poze.poza_principala = 1
LEFT OUTER JOIN `poze` ON `useri`.`user_id` = `poze`.`user_id`
(in loc de LEFT OUTER JOIN se practica abrevierea LEFT JOIN)
http://en.wikipedia.org/wiki/Join_%28SQL%29 |
|
| Sus |
|
iulyfigm
Data înscrierii: 04/Oct/2006
Mesaje: 379
|
| Trimis: Sâm Noi 24, 2007 10:02 am Titlul subiectului: |
|
|
| uita-te si aicihttp://www.w3schools.com/sql/sql_join.asp |
|
| Sus |
|
adyre
Data înscrierii: 06/Dec/2004
Mesaje: 440
Locație: Buzau
|
| Trimis: Mie Dec 12, 2007 11:47 pm Titlul subiectului: |
|
|
Dupa ceva ameteala prin query-ul tau m-am gandit sa fac ceva de genul (e chiar query-ul tau numa ca i-am schimbat putin forma):
Cod:
SELECT *
FROM tabela
WHERE campul1 LIKE 'baldabac1'
AND campul2 = 'baldabac2'
AND campul3 = 'baldabac3'
AND campul4 = 'baldabac4'
AND campul5 = 'baldabac5'
AND campul6 LIKE 'baldabac6'
INNER JOIN poze
WHERE useri.useri_id = poze.user_id
AND poze.poza_principala = 1
si am observat ca ai nishte mici greseli.. sincer, nu garantez, dar cred ca asa ti-ar merge si mai bine (si mai rapid si poate chiar ar functiona:
Cod:
SELECT * FROM tabela1
INNER JOIN poze ON useri.useri_id = poze.user_id
WHERE campul1 LIKE 'baldabac1'
AND campul2 = 'baldabac2'
AND campul3 = 'baldabac3'
AND campul4 = 'baldabac4'
AND campul5 = 'baldabac5'
AND campul6 LIKE 'baldabac6'
AND poze.poza_principala = 1
Vad ca mai multe persoane folosesc ' pentru campuri... Face query-ul mai rapid?
PS: Anunta daca asta e solutia... cat despre transformare in ceea ce-ti trebuie anunta-ma...
PSS: Daca nu ma insel, sigur iti va merge pentru ca tu ai pus join-ul (care oricum, a zis si carco, folosesti ON, nu WHERE) dupa conditii... INNER JOIN-ul il poti face numai dupa SELECT FROM cine... from cine cu ala si cu ala si cu celalalt.. cam asa e query-ul....
PSSS: Ca sa vezi un query frumos:
Cod:
SELECT Grupe.Denumire as Grupa,
Grupe.Descriere,
NomGeneral.Cod as cod_scurt,
NomGeneral.Denumire,
NomGeneral.Obsrvatii,
Sum(Stocuri.Cantitate)
FROM Stocuri
INNER JOIN Nomenclator ON Stocuri.Stoc_ID = Nomenclator.ID_Stoc
INNER JOIN NomGeneral ON Nomenclator.NomGeneral_ID = NomGeneral.ID_NomGeneral
INNER JOIN Grupe ON NomGeneral.Grupa_ID = Grupe.ID_GRUPA
INNER JOIN Miscari ON Nomenclator.NomGeneral_ID = Miscari.ID_Miscare AND Stocuri.STOC_ID = Miscari.Stoc_ID AND Stocuri.MiscareIN_ID = Miscari.MiscareIN_ID
GROUP BY Grupe.Denumire,
Grupe.Descriere,
NomGeneral.Cod,
NomGeneral.Denumire,
NomGeneral.Obsrvatii,
Grupe.Prefix
HAVING Nomenclator.Gestiune_ID=18 AND Miscari.Tip=1
ORDER BY Grupe.Prefix, NomGeneral.Denumire
sau mai simplu:
SELECT
NomGeneral.ID_NomGeneral as cod_scurt,
NomGeneral.Grupa_ID as id_grupa,
NomGeneral.Denumire as titlu,
NomGeneral.Observatii as descriere,
NomGeneral.Caracteristica3 as caracteristica,
Nomenclator.Garantie as garantie,
NomGeneral.Producator_ID as id_brand
FROM Nomenclator
INNER JOIN NomGeneral ON Nomenclator.NomGeneral_ID = NomGeneral.ID_NomGeneral
INNER JOIN NomCoduriBare ON NomGeneral.ID_NomGeneral = NomCoduriBare.NomGeneral_ID
WHERE NomCoduriBare.Implicit <> 0
AND NomGeneral.Grupa_ID NOT IN (35, 40, 41, 45, 46, 47, 49, 58, 59, 62, 63, 64, 74)
GROUP BY
NomGeneral.ID_NomGeneral,
NomGeneral.Grupa_ID,
NomGeneral.Denumire,
NomGeneral.Observatii,
NomGeneral.Caracteristica3,
Nomenclator.Garantie,
NomGeneral.Producator_ID
HAVING MAX((Nomenclator.SF - Nomenclator.SB - Nomenclator.SR)) > 0
Aceste query-uri sper ca o sa-ti deschida putin ochii si ai sa vezi ca MySQL-ul (cu toate ca aceste interogari le folosesc pe MS SQL, ci nu pe MySQL dar merg perfect si pe cel din urma) e uimitor de dorit sa-ti afiseze ce ii ceri. Important e sa prinzi valul si sa stii cum sa rogi frumos :P |
|
| Sus |
|
saitek
Data înscrierii: 23/Sep/2007
Mesaje: 442
|
| Trimis: Joi Dec 13, 2007 12:07 am Titlul subiectului: |
|
|
| O sa raspund maine sa vad daca merge ,mersii mult. |
|
| 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 |
|
| |
|