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


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

Выборка из БД


Лучший Ответ 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

#1 otto_m

otto_m

Отправлено 07 August 2017 - 19:15

Здравствуйте!

Мне нужно вывести из БД список товаров и их некоторых свойств. Для меня проблемой заключается выведение этого свойства из таблицы jos_zoo_item, столбца elements одного значения. Столбец elements имеет вид:

{
"66b537e7-bbef-4beb-a841-e63796fc6349": {
"option": {
"0": "pdf"
},
"check": "1"
},
"363dda2c-76c0-4631-b27f-b14f47492651": {
"0": {
"value": "50"
}
},
.......
 
}
Вот, к примеру, эту 50-ку и нужно вывести вместе з именем name для всех товаров. Как сделать такой запрос?


#2 CB9TOIIIA

CB9TOIIIA

Отправлено 08 August 2017 - 05:30

Обращайтесь по API

 

пример:

$PhotoEl = $this->_item->getElement($photoid_mode_list)->data();
$PhotoElApp = $this->app->data->create($PhotoEl);
$PhotoElId = $PhotoElApp->find('0.value', NULL);


  • 0

#3 otto_m

otto_m

Отправлено 08 August 2017 - 09:48

Я так плохо в ООП разбираюсь, если я щас начну там крутить... ))  А SQL запрос сможет вытащить из lonngtext поля?



#4 CB9TOIIIA

CB9TOIIIA

Отправлено 10 August 2017 - 05:37

По сути в ячейке через БД не проблема обратиться - там JSON массив, можете его разобрать.


  • 0

#5 otto_m

otto_m

Отправлено 26 September 2017 - 11:38

Здравствуйте!

Реализовал выборку запросом к БД, но с одним ограничением. Почему-то не выводит полный список итемов, исключительно только с LIMIT 350. При увеличении этого числа выдает ошибку HTTP ERROR 500

 

SELECT name, created_by, elements FROM jos_zoo_item WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC LIMIT 350

 

Чем это может быть вызвано?



#6 mmth

mmth

Отправлено 26 September 2017 - 23:54

Здравствуйте!

Реализовал выборку запросом к БД, но с одним ограничением. Почему-то не выводит полный список итемов, исключительно только с LIMIT 350. При увеличении этого числа выдает ошибку HTTP ERROR 500

 

SELECT name, created_by, elements FROM jos_zoo_item WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC LIMIT 350

 

Чем это может быть вызвано?

А если убираете LIMIT тоже в ошибку падает? LIMIT это ограничение на кол-во одновременно выбранных записей из БД.

И если падает, значит ограничения базы на время выполнения стоит, или на длину передаваемых данных на сервере.


  • 0

#7 otto_m

otto_m

Отправлено 27 September 2017 - 07:15

А если убираете LIMIT тоже в ошибку падает? LIMIT это ограничение на кол-во одновременно выбранных записей из БД.

И если падает, значит ограничения базы на время выполнения стоит, или на длину передаваемых данных на сервере.

 

Да, потому и лимит попробовал. Я тоже думаю, что ограничение по времени. Где это подрегулировать? Может, здесь еще настройки jbzoo как-то влияют?



#8 mmth

mmth

Отправлено 27 September 2017 - 15:23

Да, потому и лимит попробовал. Я тоже думаю, что ограничение по времени. Где это подрегулировать? Может, здесь еще настройки jbzoo как-то влияют?

Часть кода приложите и путь до файла, где вы это делаете, если просто запрос в бд jbzoo тут не причем


  • 0

#9 otto_m

otto_m

Отправлено 29 September 2017 - 10:55

Часть кода приложите и путь до файла, где вы это делаете, если просто запрос в бд jbzoo тут не причем

 

Я почему о скорости подумал, с какого-то времени у меня не получается даже в админке вывести все записи jbzoo, только постранично.

 

/public_html/templates/my_template/html/mod_custom/new-file.php
 
$sql = "SELECT name, created_by, elements FROM jos_zoo_item WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC LIMIT 350";


$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()) {


              $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'];


              $sql2 = "SELECT name FROM jos_users WHERE id = $created_by";
              $result2 = $mysqli->query($sql2);
              $data2 = $result2->fetch_assoc();
              $author = $data2['name'];
              
              if($element_price != "Бесплатно") {
                echo "<p><input name='tovar_id[]' type='checkbox' value='" . $tovar_id . "' /> " . $author . " - <strong>'" . $name . "'</strong> - " . $element_price . "</p>\n";
              }
         } 


$result->free();
$result2->free();
  ?>


#10 mmth

mmth

Отправлено 30 September 2017 - 07:57

 

Я почему о скорости подумал, с какого-то времени у меня не получается даже в админке вывести все записи jbzoo, только постранично.

 

/public_html/templates/my_template/html/mod_custom/new-file.php
 
$sql = "SELECT name, created_by, elements FROM jos_zoo_item WHERE application_id = 5 AND state = 1 ORDER BY created_by ASC LIMIT 350";


$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()) {


              $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'];


              $sql2 = "SELECT name FROM jos_users WHERE id = $created_by";
              $result2 = $mysqli->query($sql2);
              $data2 = $result2->fetch_assoc();
              $author = $data2['name'];
              
              if($element_price != "Бесплатно") {
                echo "<p><input name='tovar_id[]' type='checkbox' value='" . $tovar_id . "' /> " . $author . " - <strong>'" . $name . "'</strong> - " . $element_price . "</p>\n";
              }
         } 


$result->free();
$result2->free();
  ?>

 

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


  • 0




Click to return to top of page in style!