简体   繁体   中英

MySQL Query multiple results into a single value Array

I have the following array from an API

$arrs =   array(
    "id"            => $ids,
    "names"         => $names,
    "description"   => $desc,
    "picture_url"   => $p_img;
    );

The API require this information to work unfortunately I can only have one array per request, so I send this question to the developers:

How can I list multiple item such as:

  $arrs=   array(
"items1" =>   array (
    "id"            => $ids,
    "names"         => $names,
    "description"   => $desc,
    "picture_url"   => $p_img;
    )
"items2" =>   array (
    "id"            => $ids,
    "names"         => $names,
    "description"   => $desc,
    "picture_url"   => $p_img;
    )
"items3" =>   array (
    "id"            => $ids,
    "names"         => $names,
    "description"   => $desc,
    "picture_url"   => $p_img;
    )
));

And they told me that at the moment is not possible, so, the "important" part of this array is the "names", when it is use with a single item there is no problem I get a single name, done, no problem, but what if I have multiple names? I can send multiple request but that will be seen as a flood or something like... just imaging 300 names = 300 request in one second or so... sure I can put a pause per request but is not efficient...

the API will read something like this...

"id"            => 654,
"names"         => "John", // <-- Lets look at this...
"description"   => "Fancy desc...",
"picture_url"   => "http"//domain.com/assets/user/654/av_654_dd.jpg";

So before I output the array I have an SQL Query with a while to display the information...

while ($names = $listnames->fetch_assoc()) {echo $names['names']. ', ';}

This will display... John, Karl, Lisa, Mark... so this same structure I'd love to put it into my array... the thing is I can't put a while after the => ... that would be silly and it wont work...

"id"            => 654,
"names"         => "John, Karl, Lisa, Mark", // <-- Lets look at this...
"description"   => "Fancy desc...",
"picture_url"   => "http"//domain.com/assets/user/654/av_654_dd.jpg";

if I need only one name then there is not problem... but in this case I need to put all of the name as a value, so, how can get the result from a WHILE loop.... so that I can use that result elsewhere...

Thank you for taking the time..

while ($names = $listnames->fetch_assoc()) { 
     $name_array[] = $names['names'];
}

$arrs=array(
"items1" =>   array (
    "id"            => $ids,
    "names"         => implode(', ', $name_array),
    "description"   => $desc,
    "picture_url"   => $p_img;
    )
);

We don't know how you access to the API. If this is a REST API, you are able to do only what the developers planned. If this is a framework or another library, you may edit it.

And you should receive your results like theses:

$arrs =   array(
    array(
        "id"            => 1,
        "names"         => 'MyName',
        "description"   => 'MyDesc',
        "picture_url"   => 'MyPic',
    ),
    array(
        "id"            => 2,
        "names"         => 'MyName',
        "description"   => 'MyDesc',
        "picture_url"   => 'MyPic',
    ),
);

So if you have full access to the SQL results, to get all results' data, you could do: $results = array(); while( $row = $listnames->fetch_assoc() ) { $results[] = $row; }

If you want to set several possible name in input, the developers should develop that is possible with array of values. For names, they just have to code: "LIKE '".implode("', LIKE '", $names)."'" They could also add '%' to allow more values, eg 'John' for 'Johnny'.

I think we need more informations to really help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM