альтернатива назначению переменных значений в цикле while?

В настоящее время я привык использовать циклы while с моими запросами, чтобы присваивать значения переменным, которые я использую позже в коде. Иногда это просто смешно, потому что я использую как целую кучу циклов while, чтобы объединить все переменные, которые мне нужны, чтобы собрать желаемый результат из нескольких разных таблиц в моей базе данных. Я все еще довольно новичок в PHP, и, как я думаю, я начинаю отвлекаться на pdo. Но я не знаю, как лучше назначить нужные значения моим переменным, чем это. Код ниже - очень короткий пример того, о чем я говорю, просто для ясности в случае, если мой английский плохой. Код ниже - мусор, но пример. Я очень ценю любые предложения, руководство или понимание этого. Спасибо, мил!

<?php
$stmt = $core->dbh->prepare("SELECT `user` FROM `buddies` WHERE `id` = ?");
        $stmt->bindParam(1, $id);
        $stmt->execute(); $u = ""; $fname = ""; $lname = ""; $burger = "";
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $u = $row['user'];
            $stm = $core->dbh->prepare("SELECT fname,lname FROM `users` WHERE id = ?");
            $stm->bindParam(1, $u);
            $stm->execute();
            while ($rot = $stm->fetch(PDO::FETCH_ASSOC)){
                $fname = $rot['fname']; $lname = $rot['lname'];
                $st = $core->dbh->prepare("just another query that uses the last values assigned to variables returns")
                                $st->bindParam(1, $variable)
                                $st->execute
                                $burger = $st->fetchColumn();
            }//end of the second while loop of this function
        } //end of while statement 

echo $u." - ".$fname." ".$lname." text: ".$burger;

?>
1
nl ja de
почему бы вам просто не присоединиться к различным запросам? ваши первые 2 запроса могут быть легко SELECT users.fname, users.lname ОТ пользователей как пользователей INNER JOIN пользователь как пользователь ON users.id = user.user WHERE user.id =?
добавлено автор kennypu, источник
почему бы вам просто не присоединиться к различным запросам? ваши первые 2 запроса могут быть легко SELECT users.fname, users.lname ОТ пользователей как пользователей INNER JOIN пользователь как пользователь ON users.id = user.user WHERE user.id =?
добавлено автор kennypu, источник
Вы должны подталкивать часть этого в SQL с внешним соединением, а затем зацикливать один раз и создавать единую структуру данных. Код, который у вас есть, не только свернуто, но подвержен ужасным проблемам производительности из-за вложенных запросов стиля n + 1.
добавлено автор Matt Whipple, источник
Вы должны подталкивать часть этого в SQL с внешним соединением, а затем зацикливать один раз и создавать единую структуру данных. Код, который у вас есть, не только свернуто, но подвержен ужасным проблемам производительности из-за вложенных запросов стиля n + 1.
добавлено автор Matt Whipple, источник
если ваши таблицы хорошо структурированы, вы могли бы получить гораздо больше данных только в одном запросе с помощью объединений.
добавлено автор user557846, источник

2 ответы

Используйте JOINs .

Например, объедините свои первые два запроса, например

   SELECT buddies.user, users.fname, users.lname FROM buddies JOIN users ON buddies.id=users.id

Вам все равно придется использовать назначения переменных в зависимости от сценария. Но определенно вы можете уменьшить количество циклов while. Если таблицы имеют общие поля, скорее всего, у вас есть ассоциация, и JOIN - это путь.

1
добавлено
+1 за то, что он бездумно следил за вопросом, как его просили, но предлагая правильный путь.
добавлено автор Your Common Sense, источник
Вау здорово! Я собираюсь больше узнать об этом JOIN. Я на самом деле никогда не слышал об этом. Большое спасибо, ребята.
добавлено автор R.Alvin, источник

Используйте JOINs .

Например, объедините свои первые два запроса, например

   SELECT buddies.user, users.fname, users.lname FROM buddies JOIN users ON buddies.id=users.id

Вам все равно придется использовать назначения переменных в зависимости от сценария. Но определенно вы можете уменьшить количество циклов while. Если таблицы имеют общие поля, скорее всего, у вас есть ассоциация, и JOIN - это путь.

1
добавлено
+1 за то, что он бездумно следил за вопросом, как его просили, но предлагая правильный путь.
добавлено автор Your Common Sense, источник
Вау здорово! Я собираюсь больше узнать об этом JOIN. Я на самом деле никогда не слышал об этом. Большое спасибо, ребята.
добавлено автор R.Alvin, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp