Перейти к содержимому


Фотография
- - - - -

Выборка из БД


Лучший Ответ otto_m , 24 October 2017 - 08:19

Если честно, я не понял, почему не работали предыдущие простейшие запросы, но сделав оптимизацию запроса ч-з JOIN, все заработало без лимитов и сходится с реальным кол-вом итемов:

$sql = "SELECT i.name as bookname, i.created_by, i.elements, u.name FROM jos_zoo_item i INNER JOIN jos_users u ON i.created_by = u.id WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC";
 
$result = $mysqli->query($sql); 
if (!$result) {
              // Если запрос не удался
              echo "Извините, возникла проблема в работе программы.";
              exit;
          } ?>
 
 
<form action=".........php" method="post">
  
<?php
$user = JFactory::getUser();
if (!$user->guest){
?>
                <p><input name="name" id="name" required="required" type="text" value="<?php echo $user->name; ?>" /></p>
                <p><input name="email" id="email" required="required" type="text" value="<?php echo $user->email; ?>" /></p>
<?php
               }              
                else { ?>
                <p><input name="name" id="name" required="required" type="text" value="" class="eainput" placeholder="Ваше имя*" /></p>
                <p><input name="email" id="email" required="required" type="text" value="" class="eainput" placeholder="Ваш e-mail*" /></p>
<?php
}
?>
 
 
<?php  while ($data = $result->fetch_assoc()) {
 
 
              $author = $data['name'];
              $elements = json_decode($data['elements'], true);
              $element_price = $elements['7fead798-fd0b-4a4b-b48f-2839ba0b09ef'][0][value];
              $element_link = $elements['4a6f854d-502e-40da-a65a-8ef97f7f6ba7'][0][value];
              $tovar_id = substr($element_link, '31');
              $created_by = $data['created_by'];
              $name = $data['bookname'];
              
              if($element_price != "Бесплатно") {
                echo "<p><input name='tovar_id[]' type='checkbox' value='" . $tovar_id . "' /> " . $author . " - <strong>'" . $name . "'</strong> - " . $element_price . "</p>\n";
              }
        	} 

	$result->free();
  ?>
Перейти к сообщению


Сообщений в теме: 18

#11 otto_m

otto_m

Отправлено 05 October 2017 - 13:31

Есть такое подозрение... А сколько элементов на один item приходится?

 

На выходе - всего три. Но для этого нужно перелопатить 2 таблицы с условиями.

А как здесь регулировать время на обработку запроса, может попробовать увеличить лимит?



#12 mmth

mmth

Отправлено 05 October 2017 - 17:02

На выходе - всего три. Но для этого нужно перелопатить 2 таблицы с условиями.

А как здесь регулировать время на обработку запроса, может попробовать увеличить лимит?

у Вас в примере была одна таблица, похоже что-то в объяснении упускаете.

Сделайте просто запрос, и потом с данными ничего не делайте, просто в массив отправьте. Если страница загрузиться значит, в коде работы с данными проблема, а это время выполнения скрипта php.


  • 0

#13 otto_m

otto_m

Отправлено 05 October 2017 - 17:14

у Вас в примере была одна таблица, похоже что-то в объяснении упускаете.

Сделайте просто запрос, и потом с данными ничего не делайте, просто в массив отправьте. Если страница загрузиться значит, в коде работы с данными проблема, а это время выполнения скрипта php.

 

Ну почему же одна? Два запроса: sql, sql2 в разные таблицы.



#14 mmth

mmth

Отправлено 05 October 2017 - 19:16

Ну почему же одна? Два запроса: sql, sql2 в разные таблицы.

ох да сразу не заметил, сколько у вас там item'ов? сделайте как выше написал, всю работу с данными закомментируйте оставьте первый запрос и присвоение.


  • 0

#15 otto_m

otto_m

Отправлено 12 October 2017 - 10:04

ох да сразу не заметил, сколько у вас там item'ов? сделайте как выше написал, всю работу с данными закомментируйте оставьте первый запрос и присвоение.

 

Оставил самое начало

$sql = "SELECT * FROM jos_zoo_item WHERE application_id = 5 AND state = 1 ORDER BY created_by";

         $result = $mysqli->query($sql); 
			if (!$result) {
              // Если запрос не удался
              echo "Извините, возникла проблема в работе программы.";
              exit;
          } ?>

<? while ($data = $result->fetch_assoc()) {

              $name = $data['name'];
              $elements = json_decode($data['elements'], true);
              $element_price = $elements['7fead798-fd0b-4a4b-b48f-2839ba0b09ef'][0][value];
              $element_link = $elements['4a6f854d-502e-40da-a65a-8ef97f7f6ba7'][0][value];
              $tovar_id = substr($element_link, '31');
              $created_by = $data['created_by'];
  
  echo $name . " - " . $element_price . " - ID товара - " . $tovar_id . " - " . $created_by . "<br><br>";

  } ?>

странно, ошибки не выдает, но выводит далеко не все итемы по этому условию, 262 из примерно 400



#16 otto_m

otto_m

Отправлено 12 October 2017 - 13:29

Вот еще

$sql = "SELECT name, created_by, elements FROM jos_zoo_item WHERE application_id = 5 AND state = 1";

$result = $mysqli->query($sql); 
  
  echo mysqli_num_rows($result); /* выводит 382 */
  
  while ($data = $result->fetch_assoc()) {

        $name = $data['name'];
        echo "<br><br>item= " . $name;  /* выводит 334 item= */
  }

вот этого я не понимаю ))



#17 otto_m

otto_m

Отправлено 23 October 2017 - 17:48

Всем спасибо, проблему вроде решил )



#18 CB9TOIIIA

CB9TOIIIA

Отправлено 23 October 2017 - 19:52

Всем спасибо, проблему вроде решил )

 

где решение?


  • 0

#19 otto_m

otto_m

Отправлено 24 October 2017 - 08:19   Лучший Ответ

Если честно, я не понял, почему не работали предыдущие простейшие запросы, но сделав оптимизацию запроса ч-з JOIN, все заработало без лимитов и сходится с реальным кол-вом итемов:

$sql = "SELECT i.name as bookname, i.created_by, i.elements, u.name FROM jos_zoo_item i INNER JOIN jos_users u ON i.created_by = u.id WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC";
 
$result = $mysqli->query($sql); 
if (!$result) {
              // Если запрос не удался
              echo "Извините, возникла проблема в работе программы.";
              exit;
          } ?>
 
 
<form action=".........php" method="post">
  
<?php
$user = JFactory::getUser();
if (!$user->guest){
?>
                <p><input name="name" id="name" required="required" type="text" value="<?php echo $user->name; ?>" /></p>
                <p><input name="email" id="email" required="required" type="text" value="<?php echo $user->email; ?>" /></p>
<?php
               }              
                else { ?>
                <p><input name="name" id="name" required="required" type="text" value="" class="eainput" placeholder="Ваше имя*" /></p>
                <p><input name="email" id="email" required="required" type="text" value="" class="eainput" placeholder="Ваш e-mail*" /></p>
<?php
}
?>
 
 
<?php  while ($data = $result->fetch_assoc()) {
 
 
              $author = $data['name'];
              $elements = json_decode($data['elements'], true);
              $element_price = $elements['7fead798-fd0b-4a4b-b48f-2839ba0b09ef'][0][value];
              $element_link = $elements['4a6f854d-502e-40da-a65a-8ef97f7f6ba7'][0][value];
              $tovar_id = substr($element_link, '31');
              $created_by = $data['created_by'];
              $name = $data['bookname'];
              
              if($element_price != "Бесплатно") {
                echo "<p><input name='tovar_id[]' type='checkbox' value='" . $tovar_id . "' /> " . $author . " - <strong>'" . $name . "'</strong> - " . $element_price . "</p>\n";
              }
        	} 

	$result->free();
  ?>





Click to return to top of page in style!