我试图做一个简单的搜索查询PHP中:返回一个MySQL的结果与多个值从行
SELECT * FROM `books` NATURAL JOIN `authors` WHERE `books`.`title` LIKE '%$search%
在返回的结果,我希望同样的书名有一个以上作者。我想显示标题只是多个作者一次,似乎无法找到一个很好的解决方案,以打印想要的值,而这样做至少有2环与多个专柜,像这样:
$last = ""; $i = 0;
while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
$current = $row['title'];
if ($current != $last) {
$i += 1;
$books[$i]['title'] = $current;
$books[$i]['author'][] = $row['author'];
$books[$i]['pages'] = $row['pages'];
} else {
$books[$i]['author'][] = $row['author'];
}
$last = $current;
}
foreach ($books as $book) {
$return_result .= 'Title: ' . $book['title'] . '<br />';
foreach ($book['author'] as $author) {
$return_result .= 'Author: ' . $author . '<br />';
}
$return_result .= 'Pages: ' . $book['pages'] . '<br />';
$return_result .= '<br />';
}
请告诉我如果有更好的方法来做到这一点,也许在MySQL?
来自MySQL文档的非常重要的注意事项:结果被截断为由group_concat_max_len系统变量给出的最大长度,该系统变量的默认值为1024.尽管返回的有效最大长度值受max_allowed_packet的值限制。恕我直言,GROUP_CONCAT只能用于报告目的,而不能与php结合使用,因为它突出了表格设计中的缺陷。 –
我刚刚从相关问题阅读了关于GROUP_CONCAT的内容,但我无法弄清楚它到底在做什么。你能详细说说这里发生了什么吗? – tutuDajuju
没关系,只是在控制台上试了一下,我想我明白了。另外,你怎样才能使用b.title而不是书? MySQL知道选择正确的表,因为它是b中唯一的一个开始? – tutuDajuju