2015-06-05 2 views
-1

У меня есть эта структура: MySQLPHP - SQL Query Регистрация

CREATE TABLE Fields (
ID INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
ForUser VARCHAR(255) NOT NULL, 
ForCategory VARCHAR(100) NOT NULL, 
FieldName VARCHAR(100) NOT NULL 
); 
CREATE TABLE Content (
ID INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
ForUser VARCHAR(255) NOT NULL, 
ForCategory VARCHAR(100) NOT NULL, 
ForField VARCHAR(100) NOT NULL, 
FieldContent VARCHAR(255) NOT NULL 
); 

Теперь я хочу, чтобы сделать SQL-запрос, что список результатов в HTML-таблице. В качестве основной таблицы я хочу указать FieldName из полей, а в качестве тела таблицы я хочу указать FieldContent из Content. Также в WHERE предложение должно быть ForUser AND ForCategory ... для отображения содержимого для каждого поля. Я пробовал с SQL Join, но я трачу 3 часа без успеха. Может, пожалуйста, кто-нибудь напишет мне пример, как отобразить это.

+0

Затем опубликуйте, что потратил и трехчасовой код. –

+0

У меня больше нет идеи ... Я искал Google, но никаких результатов по моей проблеме. –

+1

Я бы поставил под сомнение вашу структуру данных, для начала. Почему бы не использовать Fields.ID в качестве внешнего ключа в таблице Content, а не повторять имя поля, ForUser и ForCategory в таблице Content (что, как я полагаю, вы делаете). Это поможет, если вы можете предоставить некоторые примеры данных в sqlfiddle.com –

ответ

1

Если я понимаю, этот запрос правильно (вы немного света на детали), то вам нужно использовать несколько компонентов для достижения своей цели:

Two sql-запросы (один для заголовка таблицы и один для тела таблицы) Некоторые php или другой язык сценариев для отображения ваших результатов в виде html.

Ваш первый запрос будет просто вернуть имена полей, фильтруется пользователем и категории:

select ID, FieldName from Fields where ForUser = 'some_user' and ForCategory = 'some_category' order by ID; 

В вашем PHP или другой код, вам необходимо перебирать результаты и отображать каждый результат, завернутые в HTML теги, например:

echo '<table><tr>'; 

$fields = @ mysql_query ("select ID, FieldName from Fields where ForUser = 'some_user' and ForCategory = 'some_category' order by ID;", $connection); 

while ($fields_result = mysql_fetch_assoc($fields)) { 
     echo '<th>' . $fields_result['FieldName'] . '</th>; 
     } 

echo '</tr>'; 

Затем запустите второй запрос SQL, чтобы вернуть содержимое:

select 
    FieldContent 
from 
    Content c join 

    Fields f on 
    c.ForField = f.FieldName and 
    c.ForUser = f.ForUser and 
    c.ForCategory = f.For Category 
where 
    f.ForUser = 'some_user' and 
    f.ForCategory = 'some_category' 

order by ID; 

И аналогичным образом перебираем результаты в php для построения строк содержимого в таблице.

Обратите внимание, что я заказываю на ПК в таблице полей, чтобы гарантировать, что содержимое возвращается в том же порядке, что и поля. Этот подход может быть недостаточным, вам может потребоваться добавить поле «последовательность», если вам нужен конкретный порядок полей.

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

+0

Второе свойство SQL не работает. Когда я запускаю второй SQL, он возвращает только часть всех данных в FieldContent. –

1

Таблица присоединиться запрос:

SELECT 
    a.ID, 
    a.ForUser, 
    b.ForUser, 
    a.ForCategory, 
    b.ForCategory, 
    a.FieldName, 
    b.ForField, 
    b.FieldContent 
FROM 
    Fields a, 
    Content b 
WHERE 
    a.ForUser = '' AND b.ForCategory = '' 
+0

Я вставил этот запрос, и когда я fetch_assoc, я получаю FiledName, повторяющийся без конца http://www.zimagez.com/zimage/screenshot-05062015- 125209.php Я получаю только поле FieldName для теста. –

+0

использовать 'Group BY a.ID' –

+0

Спасибо! Теперь он отображает свойство FieldName, но теперь у меня есть другая проблема: как поместить это свойство данных в таблицу HTML. Я знаю, как перечислить Table Head, но я не знаю, как перечислить таблицу Boody с данными FieldContent. Пожалуйста помогите. Еще раз спасибо! –