Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergioEmpasaDeParado
php не имеет никакого отношения к тому, что происходит в браузере, так как php выполняется на сервере,  а не в браузере. перегружает javascript.
window.frames['имя_фрейма'].location.reload();

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 19:21 13-06-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 12:27 14-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Для примера такой запрос:
 
$result  =  mysqli_query($link, "SELECT * FROM  `tb`   WHERE `st` = 'промо'" );
    while (  $line  =  mysqli_fetch_row($result)  )
        {  echo " имя: $line[1]  - возраст : $line[2]" ;  }
 
На выходе имеем
вася - 18
петя - 20
ира - 25
 
Вопрос как сделать выборку, чтобы вывести в таком виде:
вася, петя, ира
18, 20, 25
 

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 18:47 22-06-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
как сделать выборку, чтобы вывести в таком виде:  

Выборка тут ни при чем. Делаете два цикла, в одном выводите имя, во втором - другой данные. Можно и через один цикл, в котором выводите сразу имя и создание строку для второго вывода (вместо echo делаете $str .= Что_хотите_вывести; )
 

Код:
$names = [];
$ages = [];
$result  =  mysqli_query($link, "SELECT * FROM  `tb`   WHERE `st` = 'промо'" );  
    while (  $line  =  mysqli_fetch_row($result)  )  
        {  $names[] = $line[1]; $ages[] = $line[2];  }  
echo join(", ", $names);
echo join(", ", $ages);

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 18:50 22-06-2018 | Исправлено: Mavrikii, 18:55 22-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а можно пример такого цикла?
 
Добавлено:
больше спасибо, пойду изучать
 
еще раз больше спасибо, то что нужно , я то уже 2 часа читал и пробовал по разному.

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 18:58 22-06-2018 | Исправлено: sem88, 19:03 22-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
возник такой вопрос, а как можно  пронумеровать вывод?  
 
Вариант, стандартный array   [0] => ыыыы   Не подходит. Есть такая мысль -  
 
 
$i = 0;    
echo  $i++ . join("|- ",  $text) ;
 
но, не работает, как-то не так собираю.

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 18:35 25-06-2018 | Исправлено: sem88, 18:51 25-06-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
но, не работает, как-то не так собираю

и не будет работать, потому что echo срабатывает только раз.
 
либо добавляете номер в цикле, когда назначаются элементы массива.
либо потом не используете join, а делаете цикл вывода и там используете нумерацию.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 20:04 25-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте,
имеем такую конструкцию:
 
 $zapros_posl  =  mysqli_query($link, "SELECT status FROM zapr WHERE `status` = 'промо' ");
 $zapros_hodd  =  mysqli_query($link, "SELECT status FROM zapr WHERE `status` = 'данные' ");
 $zapros_raboch  =  mysqli_query($link, "SELECT status FROM zapr WHERE `status` = 'прима' ");
 $zapros_rufs  =  mysqli_query($link, "SELECT status FROM zapr WHERE `status` = 'длина' ");
 
 
echo "1 ряд - : " .  mysqli_num_rows($zapros_posl)."  
echo "2 ряд - : " .  mysqli_num_rows($zapros_hodd)."  
echo "3 ряд - : " .  mysqli_num_rows( $zapros_raboch)."  
echo "3 ряд - : " .  mysqli_num_rows( $zapros_rufs)."  
 
Как я понимаю четыре  запроса  подряд и одновременно в одну таблицу это через чур, наверное нужно как-то их объединить? Куда копать?
 

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 15:39 27-06-2018 | Исправлено: sem88, 17:09 27-06-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88
Читать о  
WHERE ... IN
https://guru99.ru/where-clause/
 
Но выбирать все данные только для подсчёта - очень плохо. В mysql есть COUNT

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 17:11 27-06-2018 | Исправлено: Mavrikii, 17:13 27-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но выбирать все данные только для подсчёта - очень плохо. В mysql есть COUNT

 
Согласен поэтому и хочу сделать правильно
SELECT  COUNT(status) FROM zapros WHERE `status` IN ('промо, данные')
 
 
    while (  $line  =  mysqli_fetch_row($zapros2)  )    
{     echo  $line[0] .$line[1]; // всего записей     }
 
Но выводит только одну запись

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 18:38 27-06-2018 | Исправлено: sem88, 18:46 27-06-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
Но выводит только одну запись

Потому что не нужно делать методом тыка.
В данной ситуации count считает все строки, не различая по статусу. Более того, читайте внимательно об IN - неправильно написали.
Для отдельного подсчёта нужно добавить GROUP BY status и выбирать его тоже в селекте.
 
ps: более того,
Цитата:
echo  $line[0] .$line[1];
, вы выбираете одно поле, поэтому элемента [1] не будет.
 

Код:
$results = mysqli_query("SELECT `status`, COUNT(`status`) as count FROM zapros WHERE `status` IN ('промо', 'данные') GROUP BY `status`");
while (  $row  =  mysqli_fetch_assoc($results)  )    
{
   echo  $row['status'] . $row['count'];  
}
 

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 18:55 27-06-2018 | Исправлено: Mavrikii, 19:53 27-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
о большое спасибо за ответ. я думал GROUP BY  нужен только  для сортировки.  
 
На ваш код  ругается:  Warning: mysqli_query() expects at least 2 parameters, 1 given
Не пойму какой второй параметр он ждет.

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 19:49 28-06-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
Не пойму какой второй параметр он ждет.


Цитата:
($link


Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 20:47 28-06-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
[/q]
[q]($link

Мда, стыдно, за такой примитивизм. Все работает спасибо.  База сделана.
 
Возник следующий вопрос. Имеем несколько сайтов с однотипной базой.  Как сделать сбор информации с них в одну общую. Т.е нажали на кнопку,  поочередно связались  с каждой из  них, скопировали информацию (объем маленький)  и удалили.    Репликация? Или есть еще варианты попроще?
 

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 14:59 04-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
Как сделать сбор информации с них в одну общую

в одну базу или одинаковые таблицы - никак, так как будут конфликты ключей и остального.
если в разные базы/таблицы, то да, репликация.
 

Цитата:
Т.е нажали на кнопку,  поочередно связались  с каждой из  них, скопировали информацию (объем маленький)  и удалили

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

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 21:34 04-07-2018 | Исправлено: Mavrikii, 22:40 04-07-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
можете сделать, чтобы сайты работали с одним сервером базы данных

 
Данных мало так что можно попробовать реализовать этот вариант. Но возникает вопрос, а что делать если сервер на который будет идти отправка (№2) вдруг ляжет, ведь 100% никто и никогда не гарантирует?  
 
Как вариант, можно попробовать при недоступности просто скинуть данные в блокнот на сервере (№1) и иногда  его проверять. Тогда как это реализовать ? Как мы можем понять, что соединения с сервером (№2) нет и нужно записывать локально? Какие для этого есть механизмы?

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 13:15 06-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
а что делать если сервер на который будет идти отправка (№2) вдруг ляжет, ведь 100% никто и никогда не гарантирует?  

ну и данные с рабочего сервера не будут удаляться пока не переместятся на другой.
 

Цитата:
при недоступности просто скинуть данные в блокнот на сервере

я не понимаю что именно вы хотите реализовать.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 19:04 06-07-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Настроил удаленный доступ к базе данных, все работает.
 
Получаем информацию с первой базы mysql:
 
 $name = []; $email = [];  $post[];
 $query = "SELECT * FROM `zap` WHERE `id` = ''555";
 $result = mysqli_query($link, $query );
 
 
 while ( $line = mysqli_fetch_row($result) )
 {  
    $name[] = $line[2];  
    $email[] = $line[3];
    $post[] = $line[4];
 
 }
 
 
 Как вставить во вторую базу массив из $name[], $email[]  и $post[] ?
 
    $query = "INSERT INTO `zap2`(email, name, post) VALUES ( ???? )";
 
 
Понимаю, что наверное нужно копать в направлении  
foreach ($email as $value) {  
  ...
 }
 
Но не получается , что почитать?.  
 
 
 
 
Добавлено:
Пока получилось сделать только для одного массива
 
             $em= $email;
    
 
    foreach ($em as $value ){
      $query = "INSERT INTO `zap2` (`email`) VALUES ('$value');";
      $res = mysqli_query($link, $query);
    }
 
Записывает все email которые есть в массиве, а как сделать  foreach  чтобы разбирал несколько массивов?  
 
Добавлено:
Разобрался :
 
 foreach ($em as $value ){
      foreach ($nam as $value2 ){
         foreach ($post as $value3 ){
 
 
  $query = "INSERT INTO `zap2` (`email`,`name`,`post`) VALUES ('$value', '$value2', '$value3');";
         $res = mysqli_query($link, $query);
}
}
}
 
Вопрос, если таких массивов будет 14 штук, т.е. и 14 foreach, это нормально? или как-то можно будет собрать покомпактнее? Производительность не сильно важна скрип будет выполняться 1 раз в сутки.

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 15:38 12-07-2018 | Исправлено: sem88, 16:14 12-07-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sem88

Цитата:
Разобрался

не разобрались.
 
более того, это неправильно.
как и не правильно, по сути, такое количество запросов вставки.
 
если массивы одинаковые, то у вас тут будет n^3 количество запросов (много лишних), когда можно обойтись одним.
 
чтобы было понятнее, вот так делается

Код:
foreach($name as $i => $val) {
... используем $val, $email[$i], $post[$i] ...
}

можно вообще все сразу делать в цикле
Цитата:
while ( $line = mysqli_fetch_row($result) )  
без массивов.
 
а правильнее будет создать один такой запрос вида

Код:
INSERT INTO `zap2` (`email`,`name`,`post`) VALUES ('val11', 'val12', 'val13'), ('val21', 'val22', 'val23'), ('val31', 'val32', 'val33');

 
можно сохранить в файл SQL команды и потом их импортировать - вариантов много.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 19:53 12-07-2018
sem88

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ответ.  И про данную функцию разумеется тоже было прочитано, но все примеры которые приводятся в самоучителях, сводятся
$names["Иванов"] = "Андрей";
$names["Петров"] = "Борис";
 
foreach ($names as $key => $value) {
echo "<b>$value $key</b><br>";
 
и на выходе-  Андрей Иванов.
 
Эту логику я еще  понимаю, но как она работает  у вас нет.   foreach($name as $i => $val)  Почему мы присваиваем ключ к массиву  $name. И потом она работает с массивом  $email[$i]  Это я пока понять не могу, но пытаюсь разобраться.  
 
Сейчас взято за основу  foreach($name as $i => $val) {  ...  Все работает.  
 
Мы получаем информацию с удаленной базы, записываем к себе и сейчас нужно удалить из первоисточника все записи которые мы получили.
 
Удаляем по их уникальным ID которые мы ранее уже  получили
 
Т.е.  
 
foreach($id as $i => $val) {  
   
   $query = "INSERT INTO `zap` (`id`,`name`,` ........
 
   $res = mysqli_query($link, $query);
 
}
 
 
 
if  ($res ) {  "DELETE FROM  `zap` WHERE  `id` IN ($del_zap)" }
 
Так правильно удалить?

Всего записей: 89 | Зарегистр. 13-04-2007 | Отправлено: 18:31 16-07-2018 | Исправлено: sem88, 18:33 16-07-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru