2016-12-21 2 views
-3

Например, у меня есть таблица «tbl_book» с 100 записями или более с несколькими столбцами, такими как book_name, book_publisher, book_author, book_rate в mysql «db_bookshop». Теперь я хотел бы получить их все одним запросом без повторения 100 раз вместо одного или двух циклов времени. Является ли это возможным? Есть ли какой-нибудь сложный способ сделать это. Как правило, мы делаем то, чтоУлучшение сбора данных из базы данных mysql

$result = mysql_query("SELECT desire_column_name FROM table_name WHERE clause"); 
while($row = mysql_fetch_array($result)) { 
    $row['book_name']; 
    $row['book_publisher']; 
    $row['book_author']; 
    .......... 
    $row['book_rate']; 
} 

// Or we may can use mysqli_query(); -mysqli_fetch_row(), mysqli_fetch_array(), mysqli_fetch_assoc(); 

Моим вопрос, есть ли какие-либо идеи или какой-либо хитрый способ, которым мы можем быть избегал раза 1oo итерации для извлечения 1oo записи? Это может быть проводной кому-то, но один из самых опытных программистов сказал мне, что это возможно. Но, к сожалению, я не смог узнать это от него. Мне жаль его, потому что его больше нет. Благодарим за обмен идеями.

+0

Вы ищете способ избежать цикла 'while', правильно? – watery

+1

Этот вопрос не имеет смысла и делает предположения неверными. Зачем использовать функции 'mysql_'? С тех пор прошло несколько лет. Если бы вы использовали 'PDO', этот код переводится в' $ records = $ pdo-> query (".....") -> fetchAll(); '. Вы получаете все с 1 запросом, почему вы думаете, что вы что-то запрашиваете 100 раз? Вы читали руководство вообще? –

+0

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

ответ

0

Короткий ответ - НЕТ , это невозможно извлечь более чем одну запись из базы данных без цикла.

Но вопрос здесь в том, что вы этого не хотите.

Нет смысла «собирать» данные - вы всегда будете что-то делать с этим. С каждой строкой. Очевидно, что цикл - это естественный способ сделать что-то с каждой строкой. Поэтому нет смысла пытаться избежать цикла.
Это делает ваш вопрос довольно бессмысленным.

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

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

+0

Сэр, я не такой опытный человек, как вы. Опыт программиста, возможно, способен сделать свое желание, зацикливая один, где опыт ООН не может. Программист-программист ООН делает то же самое неправильно. Я грустно по моему вопросу, один из самых опытных программистов сказал мне, что я получаю 100 или более записей, он может сделать это всего одним или двумя циклами. –

+0

Речь идет не о синтаксисе mysql, а о функциях pdo или msqli. Речь идет о кодировании мысли. Я ученик. Моя цель - быть известным инновационным программистом, поэтому я всегда слежу за тем, как вы думали, как вы пишете код. Я люблю программировать. Я люблю следовать как модель рулона, как вы, люди, которые больше всего переживают. Кто долгое время работал в этом секторе. С любовью и уважением. @ Ваше общее чувство –

+0

Мы не знаем, что было вашим разговором с другим программистом, поэтому мы не можем судить. Если вам нужна только одна запись из 100, то вы можете получить только одну. И вы можете спросить, как это сделать. Но если вам нужно все 100, я могу заверить вас, что их невозможно обойти без цикла.Если другой парень говорит иначе, он просто не знает, что он говорит о –

0

Вы пытались использовать mysql_fetch_assoc?

$result = mysql_query("SELECT desire_column_name FROM table_name WHERE clause"); 

while ($row = mysql_fetch_assoc($result)) { 

    // do stuff here like.. 

    if (!empty($row['some_field'])){ 
     echo $row["some_field"]; 
    } 
} 
+0

Пожалуйста, прочитайте с полной концентрацией, прежде чем дать ответ. –

1

Вы не должны использовать mysql_query расширение MySQL осуждаются:

Это расширение устаревший PHP 5.5.0, и было удалено в PHP 7.0.0.

- https://secure.php.net/manual/en/intro.mysql.php

При использовании PDO вы можете получить все элементы без цикла по запросу, как этот

$connection = new PDO('mysql:host=localhost;dbname=testdb', 'dbuser', 'dbpass'); 
$statement = $connection->query('SELECT ...'); 

$rows = $statement->fetchAll(); 
+0

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

+0

Я должен оценить ваш поступок. Вы поняли, о чем я думал. Что касается меня. Благодарю. –

+0

@YourCommonSense Вы правы. Я не в настроении ссориться о технических деталях, которые не имеют значения для человека, спрашивающего. Я признал, что это, скорее всего, то, что они искали, и дал ответ. Им не нужно зацикливаться в том смысле, что необязательно «foreach», это делается внутри PDO. – dbrumann

0

можно прочитать все 100 записей без цикла с помощью жесткого кодирования основного столбца но это должно включать в себя 100 x количество столбцов, которые должны быть перечислены, и может быть ограничение количества столбцов, которые вы можете отобразить в MySQL.

например,

select 
case when book_name='abc' then book_name end Name, 
case when book_name='abc' then book_publisher end as Publisher, 
case when book_name='abc' then book_author end as Author, 
case when book_name='xyz' then book_name end Name, 
case when book_name='xyz' then book_publisher end as Publisher, 
case when book_name='xyz' then book_author end as Author, 
... 
... 
from 
db_bookshop; 

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

0

Время, затрачиваемое на то, чтобы спросить сервер MySQL о чем-то, намного больше, чем одна итерация на стороне клиента WHILE. Таким образом, для повышения производительности, цель состоит в том, чтобы SELECT перейти на сервер в один в оба конца. Различные вызовы API делают это или не делают этого; прочитайте их детали.

Я написал много пользовательских интерфейсов с MySQL под обложками. Я не думаю, что вам нужно собрать несколько десятков строк сразу, а затем построить <table> (или что-то) с результатами. Я редко получаю более 100, не из-за производительности, а потому, что 100 (как правило) слишком много для того, чтобы пользователь мог зайти на одну веб-страницу.

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

Когда это практично, чтобы SQL выполнял «переваривание», сделайте это. MySQL быстрее выполняет SUM() и возвращает только общее количество, а не возвращает десятки строк для добавления клиента. Это в основном проблема с пропускной способностью. В любом случае MySQL будет получать (внутренне) все необходимые строки.

Смежные вопросы