@gitdev

Как объедеить запросы и выполнить один SQL запрос и затем получить результат в виде значений переменных PHP?

Есть SQL запросы которые получают разные поля из разных таблиц базы данных, как объедеить запросы и получить результат в виде значений переменных PHP.
Запросы необъодимо объеденить т.к. данных за один запрос запрашиваем строки из разных таблиц базы данных.

SELECT v.product, v.link, v.link FROM v_product v WHERE v.id = 5463 ORDER BY v.product ASC;
SELECT i.id as info_id, i.link_to_site FROM infograph v WHERE id = 5463;
SELECT i.info,  description, title, price, first_letter FROM baseinfo v WHERE id = 5463;


Как такие запросы объеденить и сохранаить значения в PHP переменные, возможно ли это, если да - то как?
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
SELECT v.product, , v.link FROM v_product v WHERE v.id = 5463 ORDER BY v.product ASC;
SELECT i.id as info_id, i.link_to_site FROM infograph v WHERE id = 5463;
SELECT i.info, description, title, price, first_letter FROM baseinfo v WHERE id = 5463;

Во первых - куда делся префикс алиаса в условии во втором запросе и почему сам алиас как в первом, хотя используется какой-то i? И тот же вопрос про третий запрос. Еще и в первом 2 раза выбран v.link... Короче бардак с самими запросами для начала пофиксить бы...
Во вторых - почему у вас айди в 3 разных таблицах один и тот же? Может это не первичный индекс, а внешний ключ, тогда он должен иначе называться. И где тогда сам первичный ключ?
В третьих - сделать нормальную структуру, ну и тогда можно объединить их через внешний ключ, с указанием что один из них (базовый) равен 5463.

Похоже что сам синтаксис вам предельно незнаком, и вы просто пишете рандомные строки...
Ответ написан
@101-s
нужно выбрать нужный тебе JOIN и в sql-запросе написать что объединение идет по id:
... ON id = 5463
если у тебя mysql то данные выводятся примерно так:
$db_host=''; // ваш хост
$db_name=''; // ваша бд
$db_user=''; // пользователь бд
$db_pass=''; // пароль к бд
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);// включаем сообщения об ошибках
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд
$mysqli->set_charset("utf8mb4"); // задаем кодировку

$result = $mysqli->query('SELECT * FROM `table_name`'); // запрос на выборку
while($row = $result->fetch_assoc())// получаем все строки в цикле по одной
{
    echo '<p>Запись id='.$row['id'].'. Текст: '.$row['text'].'</p>';// выводим данные
}

отсюда: https://ru.stackoverflow.com/questions/137194/Как-...
Ответ написан
Комментировать
Тебе нужно собрать собственный массив с этими данными.
1 способ так себе, но рабочий создаешь массив и пихаешь в него эти данные в том формате что тебе нужно.
Если совсем топорно то
SELECT v.product, v.link, v.link FROM v_product v WHERE v.id = 5463 ORDER BY v.product ASC;
->
$row[product]
SELECT i.id as info_id, i.link_to_site FROM infograph v WHERE id = 5463;
->
$row[infograph]и так далее.
это совсем утрировано, все зависит от того что ты хочешь. Мысль в том что массив можно изменять и дописывать в него другими селектами

2. но как правило просто используют JOIN в mysql К примеру LEFT JOIN Тем самым ты собираешь данные из разных таблиц в одну притом можешь управлять что с какйо стороны будет появляться, дабы потом просто выплевывать в foreach уже в виде готовых данных.

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

SELECT 
	b.bid AS nid, 
	b.text AS field_text_tgb_value, 
	b.url AS field_tgb_url_value, 
	b.footer AS field_tgb172_footer_value, 
	b.zeropixel AS field_tgb172_zero_value, 
	b.header_text AS title, 
	b.filename AS filepath 
FROM `ad_banners` b 
JOIN `ad_c` a ON `b`.`bid` = `a`.`bid`
WHERE 
	`a`.`start_date`<from_unixtime(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i') AND
	`a`.`end_date`>from_unixtime(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i') AND
    `a`.`ban_type` = '1' /* 1 - 172, 2 - 250, 3 - 330 */ AND
	`a`.`w_site` = '$safesite' /* какой сайт 1 - НК, 2 - СПБ, 3 - поселок */ AND
	`b`.`slider` = '0' /* указано, что не первый в слайдере! */
	AND `a`.`stopflag` < 1
ORDER BY RAND()
LIMIT 0, 1");


Попробуй вникнуть в смысл того что получается.
Советую тебе крепко разобраться с этим вопросом, прям вникнуть, поскольку это тебе понадобится не то что часто а вообще каждый день.
Сразу желательно без использования вот таких вещей как SELECT * и тд.
ТО есть получать только те данные которые тебе нужны из неескольких таблиц а не собирать просто все таблицы в кучу.

6361296a15eb7594616807.jpeg

А вот тебе видео чтоб совсем не запутаться
https://youtu.be/PTAkqURmI0s
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы