/ / Използване на резултатите от Array в MySQL заявка - php, mysql, масиви, implode

Използване на резултатите от Array в MySQL заявка - php, mysql, масиви, implode

Имам следната заявка:

$query_q_pass = sprintf("SELECT * FROM answers INNER JOIN users WHERE a_id = %s and answers.user_id = users.user_id");
$q_pass = mysql_query($query_q_pass, $cd) or die(mysql_error());
$row_q_pass = mysql_fetch_assoc($q_pass);

Сега отговори таблицата от горната заявка има ред brand_url който има много различни стойности, разделени със запетаи, напр. dell, microsoft, hp, ...

Това, което искам да направя, е да избера всички тези стойности от brand_url row и ги добавете в друга заявка, където ще извлека всички марки, които съществуват вътре brand_url, Това е другата заявка:

$query_conn_brands = "SELECT * FROM brands WHERE brand_url = "VALUE FROM ABOVE QUERY"";
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error());
$row_conn_brands = mysql_fetch_assoc($conn_brands);
$totalRows_conn_brands = mysql_num_rows($conn_brands);

Опитах много различни начини използване масиви, но всичко, което получавам, са всички резултати от марки таблица. Това е последният ми неуспешен опит:

$brand_pass_ids = $row_q_pass["brand_id"];
$array = array($brand_pass_ids,);

$query_conn_brands = "SELECT * FROM brands WHERE brand_url IN (" . implode(",", array_map("intval", $array)) . ")";
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error());
$row_conn_brands = mysql_fetch_assoc($conn_brands);
$totalRows_conn_brands = mysql_num_rows($conn_brands);

От горния пример всичко, което получавам, е ВСИЧКИ резултати марки масата, а не само тези, които съществуват вътре отговори таблица. Надявам се някой да ми помогне с това.

Благодаря много!

Отговори:

1 за отговор № 1

Използвайте MySQL FIND_IN_SET() функция:

Връща стойност в диапазона от 1 до N ако низът str е в списъка с низове strlist състоящ се от N подсъздатия. Списъкът на низовете е низ, съставен от подзаписи, разделени с ","Знаци. Ако първият аргумент е постоянен низ, а вторият е колона от типа SET, FIND_IN_SET() функцията е оптимизирана за използване на битово аритметично. Се завръща 0 ако str не е в strlist или ако strlist е празният низ. Се завръща NULL ако има някой от аргументите NULL, Тази функция не работи правилно, ако първият аргумент съдържа запетая (",").

MySQL> ИЗБЕРЕТЕ FIND_IN_SET ("b", "a, b, c, d");
-> 2

Във вашия случай:

SELECT * FROM brands WHERE FIND_IN_SET(brand_url, ?)

Но бихте могли да се присъединят към вашите заявки заедно по желание:

SELECT *
FROM   answers
JOIN users  USING (user_id)
JOIN brands ON FIND_IN_SET(brands.brand_url, answers.brand_url)
WHERE a_id = %s

1 за отговор № 2

Причината за това е, че заявката ви ще изглежда така:

SELECT * FROM brands WHERE brand_url IN (dell,microsoft,hp)

Има низови стойности и трябва да се обработват като струни. Опитвам:

implode(",",array_map(function($a) {return json_encode($a);},$array))

Въпреки че кодирането като JSON може да изглежда лудо, това всъщност е добър избор тук. Струнките са увити в кавички и избягали според нуждите, числата са оставени така, както са, и null се обработва също така правилно.

РЕДАКТИРАНЕ: За по-стари версии на PHP, които не поддържат анонимни функции:

implode(",",array_map(create_function("$a","return json_encode($a);"),$array));