MySQL:多行结果VS单行结果


MySQL: multi rows result VS single row result

我有这三个表,

page

page_id    page_title
1          a

content

content_id   content_text
1            text one
2            text two

content structure

page_id     content_id     order_in_page
1           1              1
1           2              2

我的工作sql,

SELECT 
    p.*,
    c.*,
    x.*
FROM pages AS p
LEFT JOIN pages_structures AS x
ON x.page_id = p.page_id
LEFT JOIN  pages_contents AS c
ON c.content_id = x.content_id
WHERE p.page_url = 'a'

结果,

page_id   page_title   content_text    order_in_page
1         a            text one        1    
1         a            text two        2

我在之后的结果

page_id   page_title   content_1   content_2    content_3    content_4
1         a            text one    text two     null         null

如何将多行结果转换为单行结果?

或者多行结果可能比我想要的单行结果更好更快?

编辑:

我想要一个单行结果的原因是,我可以通过这样做来调用content_#,

echo $page['content_1'];

就像我称之为的标题一样

echo $page['page_title'];

同样,你的想法是错误的,

如果可以这样做,就会气馁,效率低下,而且可能是不可能的

相反,在循环中处理数据并按照您的意愿处理它,

在循环中可能看起来效率更高,但我保证不是
foreach ($dataFromSQL as $data) {
    $page[] = $data;
}
// Later on when you want to access it:
echo $page[0]['page_title'];
echo $page[0]['content_text'];

其中0将是第一行,1将是第二行等。

您可以很容易地使用GROUP BYIF语句来实现这一点。当MAX进行求值时,它将始终将非null值求值为大于null。

SELECT
   page_id,
   page_title, 
   MAX(IF(order_in_page = 1, content_text, NULL)) AS content_1,
   MAX(IF(order_in_page = 2, content_text, NULL)) AS content_2,
   .
   .
   .
FROM 
   pages AS p LEFT JOIN 
   pages_structures AS x ON x.page_id = p.page_id LEFT JOIN  
   pages_contents AS c ON c.content_id = x.content_id
WHERE
   p.page_url = 'a'
GROUP BY page_id