Составить правильный запрос к базе MySQL?

В базе есть 3 таблицы. Они разные (разные столбцы и их количество). Одинаковые только поле “position” и “type” + поле “name” (здесь у всех нужных нам одно значение).
Необходимо на страницу вывести инфу из всех страниц где “name” = 1, но с сортировкой по “position” (здесь значения разные и они четко по номерам). При этом для вывода из каждой таблицы применялись свои стили в зависимости от значения в type. Например:

<div class=‘table1’>
Информация из таблицы №1. Здесь много разных данных, но position = 1
</div>

<div class=‘table2’>
Информация из таблицы №2. Здесь много разных данных, но position = 2
</div>

<div class=‘table3’>
Информация из таблицы 3. Здесь много разных данных, но position = 3
</div>

<div class=‘table2’>
Информация из таблицы №2. Здесь много разных данных, но position = 4
</div>

<div class=‘table3’>
Информация из таблицы №3. Здесь много разных данных, но position = 5
</div>

<div class=‘table1’>
Информация из таблицы №1. Здесь много разных данных, но position = 6
</div>


Я пробовал так:

$name = 1;

SELECT * FROM table1, table2, table3
WHERE table1.name = '$name' AND table2.name = '$name' AND table3.name = '$name'
ORDER BY table1.position, table2.position, table3.position ASC


А стили через:

if ($type == 'dor1') {
echo "<div class='table1'>...</div>";
}


Помогите разобраться. Потому что такая конструкция выводит все по много раз через
while ($result = mysqli_fetch_array($sql)) {
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1)
Одинаковые только поле “position” и “type” + поле “name” (здесь у всех нужных нам одно значение).
Плохо, уже на уровне структуры данных у вас лажа. Зачем хранить 3 одинаковых набора данных? Это как оверхед по занимаемому месту и излишенее разрастание бестолковых индексов, так и нарушение 3 нормальной формы.

2) В вашем случае - аутер джоин по всем трем таблицам по перечисленным полям, ну и далее вывод, с учетом индивидуальных особенностей таблиц (например проверять наличие уникального для этой таблицы столбца со значением). Но лучше сначала привести все к 3 нормальной форме, а потом уже джоинить по примари-форен кей.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы