Topic: Viena uzklausa paimti duomenis

Sveiki,

taigi turiu toki duomenu masyva:

{'4545','454545,'87878','45663','21214'...}

ir tokia duomenu baze:

id            duomenys
--------    ------------
4545             1
87878           21
454545         4
21214           3
45663           12

ar imanoma su viena uzklausa paimti duomenis is duomenu bazes pagal visus ID is duomenu masyvo?

Re: Viena uzklausa paimti duomenis

WHERE IN gali naudoti.

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Viena uzklausa paimti duomenis

O ar tai butu geriausias budas? Man baisu, kad tokios uzklausos prades reikalauti labai daug resursu. Stai kam as tai naudoju:
Paimu vartotojo feisbuko draugu sarasa, kurie taip pat naudojasi mano puslapiu (tie draugai ir yra tas duomenu masyvas ir jis gali buti didelis);
tada paimu duomenis is savo duomenu bazes apie kiekviena ta drauga;

Vienintelis budas  tai padaryti, naudoti IN()?

Re: Viena uzklausa paimti duomenis

Tai dar gali sudėti daug OR

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

5 (edited by qwertyuiop 2013-10-20 18:33:30)

Re: Viena uzklausa paimti duomenis

Aisku, bet iskilo tokia beda, kaip sujungti siuos du foreach cilkus i viena (kad galeciau atspausdinti feisbuko info ir info is savo DB)?

// atspausdinu duomenis is feisbuko
$fb=$facebook->api(array('method'=>'fql.query','query'=>'SELECT uid,first_name,last_name FROM user WHERE is_app_user=1 AND uid IN(SELECT uid2 FROM friend WHERE uid1=me())',));
foreach($fb as $print){echo $print['first_name'];}

// atspausdinu duomenis is savo duomenu bazes
foreach($fb as $a){$uid[]=$a['uid'];}  
$query=$con->query("SELECT `info` FROM `db` WHERE `uid` IN(".implode($uid,',').")");
while($nfo=$query->fetch_assoc()){echo $nfo['info'];}

Re: Viena uzklausa paimti duomenis

https://www.google.lt/#q=combine+two+foreach+php

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Viena uzklausa paimti duomenis

Na, nepavyko man isspresti bedos, nes ne tiek man reikia sujungti du foreach, kiek atspausdinti dvejus duomenis while cikle.

$query=$con->query("SELECT `info` FROM `db` WHERE `uid` IN(".implode($uid,',').")");
while($nfo=$query->fetch_assoc())
{
     echo $nfo['info'];
}

Stai cia atspausdinu duomenis is DB, bet neisivaizduoju kaip atspausdinti kartu ir duomenis gautus is feisbuko..

Re: Viena uzklausa paimti duomenis

O kas nepavyko?

var_dump(0 == 'tekstas'); // TRUE. ar zinai kodel? :)

Re: Viena uzklausa paimti duomenis

Padaryti taip, kaip parasiau.

Re: Viena uzklausa paimti duomenis

qwertyuiop wrote:

Padaryti taip, kaip parasiau.

Iš vis nė kiek?

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

11 (edited by qwertyuiop 2013-10-23 12:12:00)

Re: Viena uzklausa paimti duomenis

Stai taip susirenku visus draugu ID.

$fb=$facebook->api(array('method'=>'fql.query','query'=>'SELECT uid,first_name,last_name FROM user WHERE is_app_user=1 AND uid IN(SELECT uid2 FROM friend WHERE uid1=me())',));
foreach($fb as $a)
{
     $uid[]=$a['uid'];
}

Stai taip atspausdinu info is DB pagal tuos ID.

$query=$con->query("SELECT `info` FROM `db` WHERE `uid` IN(".implode($uid,',').")");
while($nfo=$query->fetch_assoc())
{
     echo $nfo['info'];
}

Ir net neisivaizduoju kaip padaryti, kad kartu spausdinant $nfo['info'], galeciau atspausdinti ir varda ir pavarde to zmogaus (info gauta is feisbuko)

Re: Viena uzklausa paimti duomenis

SELECT uid,first_name,last_name FROM user WHERE is_app_user=1 AND uid IN(SELECT uid2 FROM friend WHERE uid1=me())
SELECT `user`.`uid`,
   `user`.`first_name`,
   `user`.`last_name`
FROM `user`
   INNER JOIN `friend` ON `user`.`uid` = `friend`.`uid2`
WHERE `user`.`is_app_user` = 1
   AND `friend`.`uid1` = me()

Re: Viena uzklausa paimti duomenis

SELECT `user`.`uid`,
   `user`.`first_name`,
   `user`.`last_name`
FROM `user`
   INNER JOIN `friend` ON `user`.`uid` = `friend`.`uid2`
WHERE `user`.`is_app_user` = 1
   AND `friend`.`uid1` = me()

As negaliu sujungti situ dvieju uzklausu i viena.
Cia yra feisbuko uzklausa, kuria siunciu feisbuko serveriui ir man grazina duomenis i $fb:

$fb=$facebook->api(array('method'=>'fql.query','query'=>'SELECT uid,first_name,last_name,pic_square FROM user WHERE is_app_user=1 AND uid IN(SELECT uid2 FROM friend WHERE uid1=me())',));

Re: Viena uzklausa paimti duomenis

O kas tau trukdo tą daryti ciklo viduje?

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Viena uzklausa paimti duomenis

Nesuprantu, ka daryti kokio ciklo viduje?
1) visu pirma, man reikia paimti duomenis is feisbuko (ID, vardas, pavarde);
2) turedamas visus ID, galiu paimti duomenis is savo duomenu bazes;
3) atspausdinu duomenis apie vartotojus is duomenu bazes, bet kartu priskiti ir duomenis is feisbuko jau nebegaliu;

Re: Viena uzklausa paimti duomenis

Kai pasiimu duomenis is feisbuko $fb atrodo taip:

 "fb": [
    {
      "uid": 1, 
      "first_name": "vardas1", 
      "last_name": "pavarde1"
    }, 
    {
      "uid": 2, 
      "first_name": "vardas2", 
      "last_name": "pavarde2"
    },...

taigi, $fb[1]["first_name"] butu vardas2

17 (edited by qwertyuiop 2013-10-24 15:12:21)

Re: Viena uzklausa paimti duomenis

Sugalvoju tik toki buda:

        $query=$con->query("SELECT `info`,`uid` FROM `db` WHERE `uid` IN(".implode($uid,',').")");
        while($nfo=$query->fetch_assoc())
        {
            foreach ($fb as $key=>$val)
            {
                if($nfo['uid']==$key['uid']) break;
            }
            echo $nfo['info'];
            echo $fb[$key]['first_name'];
        }

bet dabar iseina, kad kai ciklas sukasi, vis yra ieskoma duomenu masyve.