我的PHP、MySQL、HTML查询和输出在这里得到了前24行的输出,没有使用WHERE、JOIN、=或HAVING ...但第二批共24行,我希望作为结果,将基于(表b)用户名(一行)具有(表a)用户名(所有24行),而(表b) b.username =$user- b.id (来自getuser()的变量)。我迷失在定义where语句的地方(见下文)。
b.id中的两行值为$user2读取7(恰好是顺序生成的值),为$user1读取6(顺序中较低一个数字)。每个用户都将使用Joomla中的BreezingForms应用程序提交信息。微风表单将表单提交拆分为两个单独的表。他们自己的Crosstec Joomla backside函数使用选择下拉菜单几乎可以做我想要的事情。(也许我可以想出如何借用这些代码。)
我正在尝试获取我想要的"24行数据“,这些数据作为登录用户的唯一值输入到数据库中,如上面的b.id和b.username所示,这与$ user ->username相同。我的下一次提交将把b.id和a.record增加到第8位。b.id是一行数据,a.record是来自webform的24行完全不同的数据。
完成这个查询后,我希望每个用户都有自己的Joomla文章页面,该页面将返回最近的24行数据(facileforms将最新的数据放在表a和表b的底部)。对于在b.username和$ user ->username之间匹配的任何给定用户,以a.record、a.title、a.value中的哪24行将被发送到html部分为线索。
我使用两个不同的用户名进行测试,如果我输入'7‘而不是'b.id’,我可以得到表a中的24行,其中a.record是(7),但这种硬编码违背了目的。我希望获得动态值来查看用户名,并将它们与$ $db ->用户名进行比较,以生成正确的select。
<p>
<?php
$user = JFactory::getUser(); echo "<p>Username: {$user->username} • User ID: {$user->id} </p>";
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->from($db->quoteName('#__facileforms_subrecords', 'a'), ($db->quoteName('#__facileforms_records', 'b')))
->select($db->quoteName(array('a.record', 'a.title', 'a.value')), ($db->quoteName(array('b.id', 'b.username'))))
->where( I am lost in defining conditions, see below )
->order('a.id ASC')
->setLimit('24');
$db->setQuery($query);
$results = $db->loadObjectList();
?>
<table class="table table-striped well">
<div align="left">
<tr>
<th><h2>Record</h2></th>
<th><h2>Title</h2></th>
<th><h2>Value on File</h2></th>
</tr>
<?php foreach($results as $result) { ?>
<tr>
<th><?php echo $result->record; ?></th>
<th><?php echo $result->title; ?></th>
<td><?php echo $result->value; ?></td>
</tr>
<?php } ?>
</div>
</table>
</p>当我使用它作为WHERE子句时,它给我的24行记录的值是7,如果我更改为6,我得到的是24行的6。我希望当b.id或a.record的值根据使用我的表单输入记录的用户名发生变化时递增。我的表单捕获他们发送到表a的24行值和发送到表b的单行值中的用户名。
下面是一个有效的WHERE子句:
->where($db->quoteName('a.record') . ' LIKE ' . $db->quote(7)) 接下来的WHERE子句返回了第一行数据( 24行中的第1行),但这一次它只返回了基于登录用户的第一行a.value,如b.username所示-只是没有给出全部24行:
->where($db->quoteName('a.value') . ' = ' . $db->quote($user->username)) 有没有人可以过来看看,和我一起工作?新手的感谢!
" ¯\_(ツ)_/¯ "
Table a
+-----------+------------+---------+
| Record | Title | Value |
+-----------+------------+---------+
| 8 | Username | Value | <- Row 1
+-----------+------------+---------+
| 8 | Point 1 | Value | <- Row 2
+-----------+------------+---------+
| 8 | Point 2 | Value | <- Row 3
+-----------+------------+---------+
Up to 24 rows as per setLimit. 24 new rows arrive at each submit form.
Table b
+-----------+------------+
| id | username |
+-----------+------------+
| 6 | Username1 | <- User 1 Row 1
+-----------+------------+
| 7 | Username2 | <- User 2 Row 25
+-----------+------------+
| 8 | Username3 | <- User 3 Row 50 and growing by 24 rows
+-----------+------------+行id号随着表单的提交和用户名的捕获而递增。
发布于 2021-06-05 08:26:02
使用联接而不是对两个表使用from。
SQL语句
SELECT a.`record`, a.`title`, a.`value`
FROM `#__facileforms_records` b
JOIN `#__facileforms_subrecords` a
ON a.`Record` = b.`id`
WHERE b.`id` = 8
ORDER BY a.`id`
LIMIT 24;Joomla PHP代码
$query
->select($db->quoteName(array('a.record', 'a.title', 'a.value')))
->from($db->quoteName('#__facileforms_records', 'b'))
->join('LEFT',$db->quoteName('#__facileforms_subrecords', 'a'). 'ON ' . $db->quoteName('a.Record') . ' = ' . $db->quoteName('b.id'))
->where($db->quoteName(('b.id') . ' = ' . '8')
->order($db->quoteName('a.id') . ' ASC')
->limit('24');注意:代码未测试-它可能包含一些拼写错误。
https://stackoverflow.com/questions/67843405
复制相似问题