Jump to content
php.lv forumi

Kaut kas nav tā ar salīdzināšanu.


Amerika

Recommended Posts

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 by Amerika
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by ezis
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

ē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 by ezis
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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"];

Link to comment
Share on other sites

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 [] => ()

Link to comment
Share on other sites

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

 

???

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...