Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 05.09.2019, 23:03   #1
Дмитрий82
Пользователь
 
Регистрация: 10.10.2018
Сообщений: 13
По умолчанию Как сделать запись из бд в массив

Здравствуйте, как сделать запись из бд в массив сравнивая ключи из другого массива.
Например есть массив $idproduct_decode где [2=>1, 5=>1] то есть 2 и 5 это ид продукта, а 1 это количество.
теперь нужно из базы продуктов вывести цены этих продуктов и записать в массив в месте с ид, вот так [2=>3500, 5=>9900]
попробовал сам не получается,
Код:
	
$idproduct_decode = json_decode($row['idproduct'], true);
foreach ($idproduct_decode as $idprod => $totalprod) {
$result = $mysqli->query("SELECT * FROM `product` WHERE `productid` = '$idprod' ");
if (mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_array($result)){
$idprod_price = [$idprod => $row["price"]];
$idprodprice_encode = json_encode($idprod_price);
Дмитрий82 вне форума Ответить с цитированием
Старый 06.09.2019, 10:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

может быть, проще получить это всё одним запросом?

типа такого:
Код:
$idproduct_decode = [2=>1, 5=>10];

$sql = 'SELECT `productid`, `price` FROM `product` WHERE `productid` in ('.implode(',', array_keys($idproduct_decode) ).')';

$result = $mysqli->query($sql);

$row = $result->fetch_array(MYSQLI_ASSOC);

$idprodprice_encode = json_encode($row);
код примерный, я его не проверял, но идея, надеюсь, понятна.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2019, 19:41   #3
Дмитрий82
Пользователь
 
Регистрация: 10.10.2018
Сообщений: 13
По умолчанию

Здравствуйте, идея хорошая но только вот что записалась в базе {"productid":"2","price":"3500"}
Код:
	$idproduct_decode = json_decode($row['idproduct'], true);
			$result = $mysqli->query("SELECT `productid`,`price` FROM `product` WHERE `productid` IN ('" . implode(',', array_keys($idproduct_decode) ) . "')") or die ("Ошибка " . mysqli_error($mysqli));
			if (mysqli_num_rows($result) > 0){
				$row = $result->fetch_array(MYSQLI_ASSOC);
					$idprodprice_encode = json_encode($row);
Дмитрий82 вне форума Ответить с цитированием
Старый 07.09.2019, 01:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
но только вот что записалась в базе
не записалось, а прочиталось из БД.
SELECT - это операция выборки данных, никакой записи тут нет.


Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
в базе {"productid":"2","price":"3500"}
ну, хорошо.
Вам же это и нужно было?
получить цену по переданным productid ?
Вам и вернулся массив, с ценой для productid = 2
а productid равный 5, судя по всему, в БД отсутствует.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2019, 11:11   #5
Дмитрий82
Пользователь
 
Регистрация: 10.10.2018
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не записалось, а прочиталось из БД.
SELECT - это операция выборки данных, никакой записи тут нет.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, хорошо.
Вам же это и нужно было?
получить цену по переданным productid ?
Вам и вернулся массив, с ценой для productid = 2
а productid равный 5, судя по всему, в БД отсутствует.
Просто ниже у меня идет запись в бд по этому я так выразился.

Да я этого и хотел но только цифрами {"2":3500,} ,без productid и price
и насчет товара под ид5 цена у него 9900 все есть в базе
Дмитрий82 вне форума Ответить с цитированием
Старый 08.09.2019, 00:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
Просто ниже у меня идет запись в бд по этому я так выразился.
ну, что у Вас там дальше по коду - тут не видно,
поэтому в теме только про чтение речь.


Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
Да я этого и хотел но только цифрами {"2":3500,} ,без productid и price
Так преобразуйте так, как Вам нужно, кто Вам мешает?

если напишите так:
Код:
$row = $result->fetch_array(MYSQL_NUM);
получите что-то вроде
[0:2,1:3500]

Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
и насчет товара под ид5 цена у него 9900 все есть в базе
точно. нужно в цикле добавлять записи в массив:
Код:
rezult=[];
while ($row = $result->fetch_array(MYSQL_NUM)) {
        rezult[]=$row;
    }
$idprodprice_encode = json_encode($rezult);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2019, 12:21   #7
Дмитрий82
Пользователь
 
Регистрация: 10.10.2018
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
rezult=[];
while ($row = $result->fetch_array(MYSQL_NUM)) {
rezult[]=$row;
}
$idprodprice_encode = json_encode($rezult);
Код:
$idproduct_decode = json_decode($row['idproduct'], true);
$result = $mysqli->query("SELECT `productid`,`price` FROM `product` WHERE `productid` IN ('" . implode(',', array_keys($idproduct_decode)) . "')");
$rezult=[];
while ($row = mysqli_fetch_array($result,MYSQLI_NUM)){
$rezult=$row;
}
$idprodprice_encode = json_encode($rezult);
В итоги на выходи только один товар ["2","3500"]

Последний раз редактировалось Дмитрий82; 08.09.2019 в 12:28.
Дмитрий82 вне форума Ответить с цитированием
Старый 08.09.2019, 14:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
$rezult=$row;
сравните с
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
$rezult[]=$row;
нужно добавлять строчки в массив, для этого не забывайте указывать квадратные скобки

Последний раз редактировалось Serge_Bliznykov; 08.09.2019 в 14:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2019, 15:42   #9
Дмитрий82
Пользователь
 
Регистрация: 10.10.2018
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

нужно добавлять строчки в массив, для этого не забывайте указывать квадратные скобки
$rezult[]=$row;
вот такой результат [["2","3500"]]
Дмитрий82 вне форума Ответить с цитированием
Старый 08.09.2019, 18:35   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
вот такой результат [["2","3500"]]
Выведите строчку с запросом куда-нибудь (хоть на страницу, хоть в файл).
SELECT `productid`,`price` FROM `product` WHERE....

(покажите, что получилось в этой строке)

дальше. выполните запрос вручную в phpmyadmin
посмотрите, что запрос возвращает.

потом проверьте, что цикл
Цитата:
Сообщение от Дмитрий82 Посмотреть сообщение
while ($row = mysqli_fetch_array
выполняется столько раз, сколько строчек в запросе.

поймите, что отлаживать программу нужно Вам, у нас нет ваших данных в БД, да и всех нужных файлов тоже нет.
ищите проблему и устраняйте: http://phpfaq.ru/debug
Serge_Bliznykov вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы - Спроектировать и разработать классы Запись в блокноте и Блокнот. Реализовать методы: Добавить запись, Удалить запись, Редактировать запись SashaRozhkov Помощь студентам 0 05.08.2017 20:16
процедура на удаление, удаляет запись из Combobox1, а как сделать что бы еще удалялись запись из полей EDIT? ИвановБ Общие вопросы Delphi 21 22.12.2016 02:28
Дан массив размера N, все элементы которого, кроме последнего, упорядочены по возрастанию. Сделать массив упорядоченным. nadyaH Помощь студентам 31 26.03.2014 11:15
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
не могу сделать запись в таблице FAiver БД в Delphi 7 01.09.2010 14:59