Amerika Posted December 1, 2011 Report Share Posted December 1, 2011 (edited) Mans uzdevums bija izveidot skriptu, kas no DB1 ņem text vērtības un salīdzina vai DB2 atrodas tieši tā text vērtība. DB1 column_1 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 DB2 column_2 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 Bet skripts parāda šādu rindu aexists in both tables.aexists in both tables.aexists in both tables.aexists in both tables. Nezinu kādēļ tā ir. Nēsmu nekāds php ģēnijs, bet kods ir šeit. <?php $con = mysql_connect("localhost","root","password"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("DB1", $con); $value1 = mysql_query("SELECT column_1 FROM table_1"); $array1 = mysql_fetch_array($value1); mysql_select_db("DB2", $con); $value2 = mysql_query("SELECT column_2 FROM table_2"); $array2 = mysql_fetch_array($value2); foreach ($array1 as $a1) { foreach ($array2 as $a2){ if ($a1 == $a2) { echo $a1."exists in both tables."; } } } mysql_close($con); ?> Par atsaucīgām atbildēm būtu pateicīgs. :) Edited December 1, 2011 by Amerika Quote Link to comment Share on other sites More sharing options...
Toms Posted December 1, 2011 Report Share Posted December 1, 2011 Salīdzini $array1 un $array2 saturu pirms foreach ar var_dump(), tad varbūt radīsies skaidrība. Vai arī no DB2 uzreiz atlasi ar SQL tikai tās vērtības, kas ir iekš DB1. Kodu priekšā nerakstīšu, jo neizskatās, ka taisies iemācīties, kā pareizi lietas jādara. Quote Link to comment Share on other sites More sharing options...
ezis Posted December 2, 2011 Report Share Posted December 2, 2011 (edited) Ja tabulās ir saturs: DB1 column_1 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 DB2 column_2 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 Tad vai tad šāds iznākums nav tikai loģisks? o0 aexists in both tables.aexists in both tables.aexists in both tables.aexists in both tables. Ja runa iet par to, kāpēc neizvada kādu vērtību no db ($a1)? Tad paklausi Tomu ar var_dump()! Edited December 2, 2011 by ezis Quote Link to comment Share on other sites More sharing options...
Amerika Posted December 2, 2011 Author Report Share Posted December 2, 2011 Salīdzini $array1 un $array2 saturu pirms foreach ar var_dump(), tad varbūt radīsies skaidrība. Vai arī no DB2 uzreiz atlasi ar SQL tikai tās vērtības, kas ir iekš DB1. Kodu priekšā nerakstīšu, jo neizskatās, ka taisies iemācīties, kā pareizi lietas jādara. Ja tabulās ir saturs: DB1 column_1 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 DB2 column_2 text vērtības ir pēc secības piemēram: a,abb2,cc23,sss3 Tad vai tad šāds iznākums nav tikai loģisks? o0 aexists in both tables.aexists in both tables.aexists in both tables.aexists in both tables. Ja runa iet par to, kāpēc neizvada kādu vērtību no db ($a1)? Tad paklausi Tomu ar var_dump()! Vai tu domāji lai šādi uzrakstu? <?php $con = mysql_connect("localhost","root","password"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("DB1", $con); $value1 = mysql_query("SELECT column_1 FROM table_1"); $array1 = mysql_fetch_array($value1); mysql_select_db("DB2", $con); $value2 = mysql_query("SELECT column_2 FROM table_2"); $array2 = mysql_fetch_array($value2); echo var_dump($array1 == $array2); foreach ($array1 as $a1) { foreach ($array2 as $a2){ if ($a1 == $a2) { echo $a1. "exists in both tables."; } } } mysql_close($con); ?> Pēc šī man rādās šāds rezultāts. bool(false) aexists in both tables.aexists in both tables.aexists in both tables.aexists in both tables. Nezinu ko nozīme bool(false) google nerādija konkrētu atbildi. Ezis: Mans mērķis ir uztaisīt tā, lai viņš parāda a exists in both tables. abb2 exists in both tables. cc23 exists in both tables. utt. Quote Link to comment Share on other sites More sharing options...
briedis Posted December 2, 2011 Report Share Posted December 2, 2011 (edited) Sagrūt vērtības divos masīvos, uztaisi array_intersect un paskaties, kuras vērtības ir abos masīvos.. Edited December 2, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
ezis Posted December 2, 2011 Report Share Posted December 2, 2011 (edited) ēee, paga! Tu taču centies atlasīt rindas nevis kolonnas? mysql_query("SELECT column_1 FROM table_1"); Nedaudz nobraucu no domas kāds Tev varētu būt DB izkārtojums! o0 Nav gadienā $a1['column_1'] # nevis pliks $a1 # ? briedis variants ir viss vienkāršākais as array_intersect! Pēc tam tik ciklā izvadi rezultātu. Edited December 2, 2011 by ezis Quote Link to comment Share on other sites More sharing options...
briedis Posted December 2, 2011 Report Share Posted December 2, 2011 Vienkāršāk par vienkāršu... http://paste.php.lv/c0a8845011cd88e3db5ea37305dbfaa2?lang=php Quote Link to comment Share on other sites More sharing options...
Amerika Posted December 2, 2011 Author Report Share Posted December 2, 2011 Vienkāršāk par vienkāršu... http://paste.php.lv/...dbfaa2?lang=php O, liels paldies par palīdzību. Man array funkcijas vēl jāmācās vēl vairāk. Quote Link to comment Share on other sites More sharing options...
briedis Posted December 2, 2011 Report Share Posted December 2, 2011 Galvenais atcerēties, pirms taisi kādas darbības ar masīviem - varbūt jau tāda funkcija ir, un nedaudz jāparokas gūglē vai manuālī... http://php.net/manual/en/ref.array.php Quote Link to comment Share on other sites More sharing options...
Amerika Posted December 2, 2011 Author Report Share Posted December 2, 2011 Jau ilgi lasu un skatos video par array funkciju. Pēc idejas array beigās parādās key => value. Bet vai ir iespējams tā, ka key => value1, value2. Vēlējos uzzināt vai var būt divi value iekš viena key? Cenšos paplašināt jau esošo skriptu, lai piešķirtu beigu vērtībai vērtību, kura atrodas uz tās pašas rindas bet uz citas kolonnas datubāzē. Quote Link to comment Share on other sites More sharing options...
Toms Posted December 3, 2011 Report Share Posted December 3, 2011 key => array(value1, value2) ? Quote Link to comment Share on other sites More sharing options...
briedis Posted December 3, 2011 Report Share Posted December 3, 2011 Tas vairs nav parasatas masīvs, bet gan divdimensiju. Jā, masīva elements var būt praktiski jebkas. Arī cits masīvs, kura elementi arī var būt masīvi, un tā bezgalīgi, kamēr beidzas atmiņa :p $arr = array("a" => array("b" => "bbb", "c" => "ccc")); echo $arr["a"]["b"]; Quote Link to comment Share on other sites More sharing options...
Amerika Posted December 3, 2011 Author Report Share Posted December 3, 2011 Es centos ar arrayiem iegūt mazliet detalizētāku rezultātu, bet kaut kā nesanāk. Vēlos iegūt pēc funkcijas print_r šādu apmēram rezultātu. [0] => [Amerika] => [id] => [Jau citi salidzīnāšanas dati, kurus varētu izpildīt ar if (a == b)] => [un tā visu laiku], [1] => [aaaaa] => [id] => [utt] Pašreizējais kods, kurš sanāk līdz beigām izņemot tas, ka nevaru pielikt id klāt. <?php $con = mysql_connect("localhost","root","password"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("DB1", $con); $value1 = mysql_query("SELECT pf_ingame_nick FROM phpbb_profile_fields_data"); mysql_select_db("DB2", $con); $value2 = mysql_query("SELECT * FROM ps_plr_ids_name"); $arr1 = array(); $arr2 = array(); $arr3 = array(); $arr4 = array(); $arr5 = array(); $arr7 = array(); while($row = mysql_fetch_assoc($value1)){ $arr1[] = $row['pf_ingame_nick']; } while($row = mysql_fetch_assoc($value2)){ $arr2[] = $row['name']; $arr4[] = $row['plrid']; } $arr3[] = array_intersect($arr1, $arr2); while($row = mysql_fetch_assoc($value2)){ } $arr5 = array("id" => $arr4,"name" => $arr2); $arr6["equal"] = array_intersect($arr3, $arr5["name"]); echo "In both databases: "; print_r($arr6["equal"]["id"]); //Tas "id" man ir kaut kā jādabū klāt pie tā piederošā "name", abi divi atrodas mysql vienā rindā. mysql_close($con); ?> Vai vispār var iegūt tā, lai ir [] => [] => [] => [] nevis [] => () Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted December 4, 2011 Report Share Posted December 4, 2011 SELECT col1 FROM db1.table1 INTERSECT SELECT col2 FROM db2.table2 Doing an INTERSECT An INTERSECT is simply an inner join where we compare the tuples of one table with those of the other, and select those that appear in both while weeding out duplicates. So SELECT member_id, name FROM a INTERSECT SELECT member_id, name FROM b can simply be rewritten to SELECT a.member_id, a.name FROM a INNER JOIN b USING (member_id, name) SELECT t1.col1 FROM db1.table1 t1 INNER JOIN db2.table2 t2 ON t1.col1 = t2.col2 ??? Quote Link to comment Share on other sites More sharing options...
NBS Posted December 5, 2011 Report Share Posted December 5, 2011 Ja tev vajag tiešām tikai vienādos, tad Mr.Key variants ir viss labākais. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.