У меня есть 2 таблицы и внешний ключ — timesection_id.
Первая таблица: временной интервал
| id | имя | время | положение |
Вторая таблица является содержанием
| id | название | short_desc | desc | img | положение | timesection_id |
Я хотел бы создать левое соединение с первой таблицей. Это должен быть порядок по позиции.
Результат должен выглядеть так:
array (size=1)
'content' =>
array (size=2)
1 =>
array (size=3)
'time' => string '12-00' (length=5)
'name' => string 'Start' (length=21)
'performer' =>
array (size=3)
0=>
'title' => string '12-00'
'desc' => string 'etc etc'
'shor_desc' => string 'etc etc'
'img' => string '1.jpg'
1=>
'title' => string '12-00'
'desc' => string 'etc etc'
'shor_desc' => string 'etc etc'
'img' => string '1.jpg'
2 =>
array (size=3)
'time' => string '13-00' (length=5)
'name' => string 'Something' (length=24)
'performer' =>
array (size=3)
0=>
'title' => string '12-00'
'desc' => string 'etc etc'
'shor_desc' => string 'etc etc'
'img' => string '1.jpg'
1=>
'title' => string '12-00'
'desc' => string 'etc etc'
'shor_desc' => string 'etc etc'
'img' => string '1.jpg'
Мой sql:
SELECT * FROM timesection
LEFT OUTER JOIN content ON timesection_id = timesection.id
ORDER BY timesection.position ASC
И у меня есть этот результат:
0 =>
array (size=9)
'id' => null
'name' => string 'KezdĂŠs' (length=7)
'time' => string '11:00' (length=5)
'position' => null
'title' => null
'short_desc' => null
'desc' => null
'img' => null
'timesection_id' => null
1 =>
array (size=9)
'id' => string '1' (length=1)
'name' => string 'KezdĂŠs, Sikerdal debĂźtĂĄlĂĄsa' (length=31)
'time' => string '12:00-14.00' (length=11)
'position' => string '1' (length=1)
'title' => string 'Ăv Embere orvoscsoport' (length=23)
'short_desc' => string '' (length=0)
'desc' => string 'PĂŠldĂĄtlan ĂśsszefogĂĄs eredmĂŠnyekĂŠnt egĂŠszsĂŠges gyermeket szĂźlt ĂŠs nĂŠgy ĂŠletet mentett meg egy tĂśbb hĂłnapja agyhalott asszony Debrecenben' (length=149)
'img' => string '1.jpg' (length=5)
'timesection_id' => string '2' (length=1)
2 =>
array (size=9)
'id' => string '2' (length=1)
'name' => string 'KezdĂŠs, Sikerdal debĂźtĂĄlĂĄsa' (length=31)
'time' => string '12:00-14.00' (length=11)
'position' => string '2' (length=1)
'title' => string 'Varga RĂłbert' (length=13)
'short_desc' => string '' (length=0)
'desc' => string 'Varga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbertVarga RĂłbert' (length=156)
'img' => string '1.jpg' (length=5)
'timesection_id' => string '2' (length=1)
3 =>
array (size=9)
'id' => string '3' (length=1)
'name' => string 'KezdĂŠs, Sikerdal debĂźtĂĄlĂĄsa' (length=31)
'time' => string '12:00-14.00' (length=11)
'position' => string '3' (length=1)
'title' => string 'BenkĹ Vilmos ĂŠs fiatal tehetsĂŠgek' (length=36)
'short_desc' => string '' (length=0)
'desc' => string 'BenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgekBenkĹ Vilmos ĂŠs fiatal tehetsĂŠgek' (length=396)
'img' => string '1.jpg' (length=5)
'timesection_id' => string '2' (length=1)
Если в основной таблице есть больше записей из подтаблицы, я хотел бы создать значение исполнителя и поместить его в подмассив. Значение исполнителя может быть нулевым.
SQL-запрос:
SELECT timesection.id,timesection.name,timesection.time,
content.title,content.short_desc,content.desc,content.img,content.id as cid
FROM timesection
LEFT JOIN content ON content.timesection_id = timesection.id
ORDER BY timesection.position , content.position
PHP CODE: (примечание: используя устаревшие устаревшие функции mysql_ *, рассмотрите возможность использования mysqli или PDO)
$r = mysql_query($query);
$array = array('content'=>array());
$i=0;
$lastid = null;
while($row=mysql_fetch_object($r))
{
if($lastid!==$row->id)
{
$array['content'][++$i]=array('time'=>$row->time,'name'=>$row->name,'performer'=>array());
$lastid=$row->id;
}
if($row->cid!==null)
{
$array['content'][$i]['performer'][]=array('title'=>$row->title,'short_desc'=>$row->short_desc,'desc'=>$row->desc,'img'=>$row->img);
}
}
Других решений пока нет …