Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24

Столбец БД перевести в массив и использовать в запросе

11.06.2017, 18:50. Показов 1369. Ответов 10

Студворк — интернет-сервис помощи студентам
есть таблица "users" в ней храниться столбец "u_liked" он заполнен примерно так (3 2 1), так вот как мне сделать так что бы каждое число из столбца "u_liked" использовалось в запросе. Вопрос наверное довольно таки тупой, но я новичок так что сорри)
Код написан тоже разуметься крыво... но он работает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if( isset($_GET["email"]) && !empty($_GET["email"]) ) {
     $conn = new mysqli("mysql.hostinger.ru", "u858836722_testk", "80040163", "u858836722_testk");
     $email=$_GET["email"];
     $email = stripslashes($email);
     $email = $conn->real_escape_string($email);  
 
    $check="SELECT u_liked FROM users WHERE u_id = '".$email."'";
    // 
    $rs1 = mysqli_query($conn,$check);
    $row = mysqli_fetch_assoc($rs1);
    
    $row = stripslashes($row['u_liked']);
    $row = $conn->real_escape_string($row);
    
 
    $query="SELECT p_id, p_name, p_description, p_image_id, p_price, p_add  FROM products where p_id ='".$row."' ";
    // Don't work query
    $result = $conn->query($query);
    $outp = "";
   while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "") {$outp .= ",";}
    $outp .= '{"p_id":"'  . $rs["p_id"] . '",';
    $outp .= '"p_name":"'   . $rs["p_name"]        . '",';
    $outp .= '"p_description":"'   . $rs["p_description"]        . '",';
    $outp .= '"p_image_id":"'   . $rs["p_image_id"]        . '",';
    $outp .= '"p_price":"'. $rs["p_price"]     . '",';
    $outp .= '"p_add":"'. $rs["p_add"]     . '"}';
}
    $has_more=2;
                           
  $outp ='{"has_more":'.$has_more.',"records":['.$outp.']}';
    $conn->close();
    echo($outp);    
}
Когда в столбце "u_liked" содержит одно число например (1), запрос выполняется ..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2017, 18:50
Ответы с готовыми решениями:

Дан двумерный массив, найти столбец с минимальной суммой элементов, дополнительный массив не использовать
дан двумерный массив найти стобец с минимальной суммой элементов дополнительный массив не использовать

Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив.
Есть текстовый файл, в нем 3 столбца чисел (число строк заранее неизвестно). Напишите пожалуйста код, чтобы первый столбец записывался в...

Как заполнить массив на клиенте, затем использовать в запросе на сервере
Доброго времени суток, господа! Такой вопрос, получаю в управляемой форме из таблицы значений поля выделенных строк, затем их нужно...

10
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
11.06.2017, 19:16
PHP
1
$query="SELECT p_id, p_name, p_description, p_image_id, p_price, p_add  FROM products where p_id IN (SELECT u_liked FROM users WHERE u_id = '".$email."')";
0
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
11.06.2017, 19:34  [ТС]
Ваш запрос работает но если в столбце "u_liked" один символ, если в поле больше одной цифры запрос не работает... наверное потому что "p_id" содержит id-шник тобишь одну цифру
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
11.06.2017, 19:47
Лучший ответ Сообщение было отмечено God3361 как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if( isset($_GET["email"]) && !empty($_GET["email"]) ) {
     $conn = new mysqli("mysql.hostinger.ru", "u858836722_testk", "80040163", "u858836722_testk");
     $email=$_GET["email"];
     $email = stripslashes($email);
     $email = $conn->real_escape_string($email); 
    $check="SELECT u_liked FROM users WHERE u_id = '".$email."'";
    $rs1 = mysqli_query($conn,$check);
    $row = mysqli_fetch_assoc($rs1);    
    $row = explode(' ',$row['u_liked']);
    $row = array_map('intval',$row);
    
    $row = $conn->real_escape_string($row); 
    $query="SELECT p_id, p_name, p_description, p_image_id, p_price, p_add  FROM products where p_id IN (".implode(',',$row).")";
    $result = $conn->query($query);
    $outp = "";
   while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "") {$outp .= ",";}
    $outp .= '{"p_id":"'  . $rs["p_id"] . '",';
    $outp .= '"p_name":"'   . $rs["p_name"]        . '",';
    $outp .= '"p_description":"'   . $rs["p_description"]        . '",';
    $outp .= '"p_image_id":"'   . $rs["p_image_id"]        . '",';
    $outp .= '"p_price":"'. $rs["p_price"]     . '",';
    $outp .= '"p_add":"'. $rs["p_add"]     . '"}';
}
    $has_more=2;
                           
  $outp ='{"has_more":'.$has_more.',"records":['.$outp.']}';
    $conn->close();
    echo($outp);    
}
1
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
11.06.2017, 20:01  [ТС]
СПАСИБО, но нужно удалить 12 строку, а так все работает
Вы бы не могли объяснить, ваш код, если конечно не сложно)
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
11.06.2017, 20:21
Лучший ответ Сообщение было отмечено God3361 как решение

Решение

PHP
1
2
3
$row = explode(' ',$row['u_liked']); // разделим строку пробелами на элементы массива
$row = array_map('intval',$row); // каждый элемент преобразуем в целое число
implode(',',$row) // склеим элементы запятыми
1
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
12.06.2017, 02:26  [ТС]
Возможно ты мог еще помочь, или дать понять в каком направление думать ...
При нажатии на кнопку срабатывает этот php запрос и записывает в столбец "u_liked", айдишник из столбца "p_id".
Только вот когда нажимаешь больше одного раза на кнопу одного и того же продукта в u_liked повторно записывается id продукта, например u_liked(1 3 1 ), не могу вообще понять как выйти с этой ситуации что бы оно или удаляло повторно или выкидывало ошибку второй попытки нажатия ...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 if( isset($_GET["email"]) && isset($_GET["l"]) ){  
        if( !empty($_GET["email"])  && !empty($_GET["l"])  ){   
            $conn = new mysqli("mysql.hostinger.ru", "****", "****", "u858836722_testk");                       
            $username=$_GET["email"];       
            $like=$_GET["l"];               
            
            // To protect MySQL injection for Security purpose      
            $username = stripslashes($username);
            $username = $conn->real_escape_string($username);       
           
        $check="SELECT count(*) FROM users WHERE u_id = '".$username."'";
        $rs = mysqli_query($conn,$check);
        $data = mysqli_fetch_array($rs, MYSQLI_NUM);
 
 
        if($data[0] > 0) {
            $check2 =" SELECT  `u_liked` FROM  `u858836722_testk`.`users` WHERE  `users`.`u_id` =  '".$username."' ";
            $rsl = mysqli_query($conn,$check2);
            while ($row = mysqli_fetch_assoc($rsl)) {
                $cuka=($row['u_liked']);
            }
          
            (string)$like = "$like $cuka";
            echo ($like);
            
            $like = stripslashes($like);
            $like = $conn->real_escape_string($like);
 
            $sql = "UPDATE  `u858836722_testk`.`users` SET  `u_liked` =  '".$like."' WHERE  `users`.`u_id` =  '".$username."' "; 
            $rs = mysqli_query($conn,$sql);
        }
            
            echo($sql); 
            $conn->close();   
        }
    }
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
12.06.2017, 08:10
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 if( isset($_GET["email"]) && isset($_GET["l"]) ){  
        if( !empty($_GET["email"])  && !empty($_GET["l"])  ){   
            $conn = new mysqli("mysql.hostinger.ru", "****", "****", "u858836722_testk");                       
            $username=$_GET["email"];       
            $like=$_GET["l"];               
            
            // To protect MySQL injection for Security purpose      
            $username = stripslashes($username);
            $username = $conn->real_escape_string($username);       
           
        $check="SELECT count(*) FROM users WHERE u_id = '".$username."'";
        $rs = mysqli_query($conn,$check);
        $data = mysqli_fetch_array($rs, MYSQLI_NUM);
 
 
        if($data[0] > 0) {
            $check2 =" SELECT  `u_liked` FROM  `u858836722_testk`.`users` WHERE  `users`.`u_id` =  '".$username."' ";
            $rsl = mysqli_query($conn,$check2);
            if ($row = mysqli_fetch_assoc($rsl)) {
                $cuka=explode(' ',$row['u_liked']);
            } else $cuka = array();
          
            $cuka[] = $like;
            $cuka = array_map('intval', $cuka);
            $cuka = implode(' ',$cuka);
            echo $cuka;
            
            //$like = stripslashes($like);
            //$like = $conn->real_escape_string($like);
 
            $sql = "UPDATE  `u858836722_testk`.`users` SET  `u_liked` =  '".$cuka."' WHERE  `users`.`u_id` =  '".$username."' "; 
            $rs = mysqli_query($conn,$sql);
        }
            
            echo($sql); 
            $conn->close();   
        }
    }
1
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
12.06.2017, 21:56  [ТС]
Когда три раза нажимаешь на кнопку лайк id продукта который = 1, в бд в таблице (u_liked) заполняется (0 1 1 1 )
0
313 / 312 / 221
Регистрация: 11.07.2015
Сообщений: 1,107
12.06.2017, 22:18
Лучший ответ Сообщение было отмечено God3361 как решение

Решение

PHP
1
2
3
4
5
            $cuka[] = $like;
            $cuka = array_map('intval', $cuka);
            $cuka = array_unique($cuka); // уникальность
            $cuka = implode(' ',$cuka);
            echo $cuka;
1
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
12.06.2017, 22:40  [ТС]
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.06.2017, 22:40
Помогаю со студенческими работами здесь

Конвертировать столбец с датой в запросе!
Здравствуйте! в БД у меня колонка с типом varchar(30) в ней хранятся даты например 02.09.2011 16:21:31 02.09.2011 16:37:51 ...

Массив: переставить местами столбец с наибольшим количеством нулевых элементов и столбец последний по порядку
Друзья, помогите плиз сделать лабу в VBA) Написать процедуру. Для заданного массива В(4,5), переставить местами столбец с наибольшим...

Как в запросе выводить только нужный столбец?
День добрый. Форумчане, подскажите. Как сделать, чтоб в запросе "запрос по дате" выводились фио, подразделение и осн профессия, а так...

Ошибка при сложном запросе к БД (не найден столбец PROGRAMMId)
Работаю по примеру Модели со сложной структурой Есть две таблицы SPR_PROGRAM (названия программ) и SPR_FINANS_PROGRAM (суммы по...

Использовать цикл в запросе
У меня есть запрос, в котором я должен записать в таблицу Mark информации, но у меня данные не статические, а заполняются в зависимости...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru