2013-08-05 1 views
0

Я хочу запросить некоторые данные таблицы таблицы mysql (jos_fieldsattach_values), которая заставляет мой мозг курить.mysql query в не нормированной таблице с соединением и подзапросами

Данная таблица имеет следующую структуру, которую я не могу изменить:

id | articleid | fieldsid | value 

таблица хранит Новости даты. См.: http://sqlfiddle.com/#!2/8f9bf/1

Цель состоит в том, чтобы выводить каждую новость данных как объект или массив, который находится в ближайшие пять дней. Трудная часть этого заключается в том, что в таблице нет полей типа «дата новостей» или «субтитры», но сохраняет весь контент в поле «значения». Я могу определить тип данных по значению «fieldsid». F.e Даты всегда будут иметь fildsid в (4,7,10), или субтитры будут иметь поля в (14,15,16) и так далее. Это крайне неудобно, но, как сказано, я не могу изменить структуру таблицы или способ сохранения данных.

Мой первый шаг должен был получить статьи, которые имеют новости в течение следующих пяти дней

SELECT 
    articleid 
FROM 
    `jos_fieldsattach_values` 
WHERE 
    value > NOW() and value < NOW() + INTERVAL 5 DAY 

Выход составляет: 316, 271, 271

Следующим шагом, где у меня есть проблемы:

SELECT a.value,b.title, b.id FROM 
    jos_fieldsattach_values as a 
INNER JOIN 
    jos_content as b ON (a.articleid = b.id) 
WHERE a.articleid in (271,216) and a.fieldsid in (14,15,16) and value<>'' 

Я присоединяюсь к jos_fieldsattach_values ​​с jos_content, чтобы получить заголовки статей дальше. Я знаю из моего первого запроса, у которого есть новости, чтобы показать WHERE a.articleid in (216,271)

Где я пытаюсь упорядочить или запросить данные как объект. В псевдокоде:

WHERE 
    a.articleid in (271,216) // query rows with article ids only 
AND 
    a.fieldsid in (14,15,16) as subtitle // if fieldsid is X it has to be a subtitle 
AND 
    a.fieldsid in (4,7,10) as date // if fieldsid is Y it has to be a subtitle 

Редактировать: Выход был бы полезен в качестве двумерного массива. Что-то вроде:

Array 
(
[2013-08-09] => Array  // fieldsid in (4,7,10, …) 
    (
    [0] => News Title 1  // fieldsid in (1,2,3, …) 
    [1] => News Subtitle 1 // fieldsid in (14,15,16, …) 
    [2] => News Text 1  // fieldsid in (5,6,7, …) 
) 
[2013-08-08] => Array 
    (
    [0] => News Title 2 
    [1] => News Subtitle 2 
    [2] => News Text 2 
) 
[2013-08-07] => Array 
    (
    [0] => News Title 3 
    [1] => News Subtitle 3 
    [2] => News Text 3 
) 
) 

Где дата первого массива, а второй массив имеет название данных. Каждый массив и его дочерний массив имеют одинаковый идентификатор статьи.

Благодарный для каждого подхода,

Toni

+0

что ваш ожидаемый результат? – Aris

+0

Когда вы описываете поле Assn –

+0

Hi Aris & Peter, я отредактировал вопрос, чтобы показать ожидаемый результат. Поля сохраняются с стороннего компонента joomla, который я не могу изменить; (спасибо, toni –

ответ

0

Хорошо, не самый лучший способ, возможно, но это работает:

// Array for Field Date 
$dates = array("4", "7", "10"); 

// Array for Field Zusatz 
$zusatz = array("14", "15", "16"); 

// Array for Field Typ 
$types = array("5", "8", "11"); 

// Array for Field Beschreibungstext 
$desc = array("6", "9", "12"); 


$rows = array(); 


// FIll News Array with Data 

while ($row = mysql_fetch_array($result)) { 
// Filter for wrong date 
if ($row{'value'} !== "1970-01-01"){ 

// if field has date value 
if (in_array($row{'fieldtype'}, $dates)) { 
    $rows[$row{'value'}] = array(); 
    $datum = $row{'value'}; 
    $rows[$datum]["id"] = $row{'id'}; 
    $rows[$datum]["datum"] = $row{'value'}; 
    $rows[$datum]["title"] = $row{'title'}; 
    $rows[$datum]["alias"] = $row{'alias'};}; 

if (in_array($row{'fieldtype'}, $zusatz)) {$rows[$datum]["Untertitle"] = $row{'value'};}; // if field has Subtitle 
if (in_array($row{'fieldtype'}, $types)) {$rows[$datum]["Art"] = $row{'value'};} // if field has kind of value 
if (in_array($row{'fieldtype'}, $desc)) {$rows[$datum]["Beschreibung"] = $row{'value'};} // if field has descripton value 
} 

}

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

  • Нет связанных вопросов^_^