【问题标题】:I want to have data from 2 tables in MySQL ordered by date我想从 MySQL 中的 2 个表中获取按日期排序的数据
【发布时间】:2018-05-18 04:49:43
【问题描述】:

我想从 MySQL 中的两个表中获取数据,按日期排序。

$sql = "
SELECT 
    items.*, invoice.* 
FROM 
    items 
JOIN 
    invoice 
ON 
    items.user_id = invoice.buyer_id 
WHERE 
    items.user_id = '$user_id'" 
LIMIT 
    10 
ORDER BY 
    date;
";

【问题讨论】:

  • 问题是什么? limit 10 order by date 可能会抛出 PHP 语法错误,应该在双引号内。此外,您在该位的顺序不正确,limit 应该是最后一个dev.mysql.com/doc/refman/5.7/en/select.html
  • 我们总是乐于帮助和支持新的编码员,但您需要先帮助自己。 :-)doing more research 之后,如果您有问题发布您尝试过的方法,并清楚地解释什么不起作用并提供a Minimal, Complete, and Verifiable example。阅读How to Ask 一个好问题。请务必take the tour 并阅读this
  • 你能澄清问题出在哪里吗?试着解释问题出在哪里。您收到错误消息吗?排序顺序不对?没有记录?
  • 你在一个奇怪的地方有一个引号,并且 LIMIT 不能出现在 ORDER BY 之前。除此之外,我不知道你在追求什么。
  • 另外,最好使用prepared statements,避免SQL inection

标签: php mysql


【解决方案1】:

尝试:

$sql = "SELECT *";
$sql .= " FROM items, invoice";
$sql .= " WHERE items.user_id = invoice.buyer_id";
$sql .= " AND items.user_id = '$user_id'";
$sql .= " ORDER BY date DESC";
$sql .= " LIMIT 10";

另外,最好将其用作准备好的语句,而不是在 SQL 查询中使用变量以避免 SQL 注入。

【讨论】:

  • 为什么有所有.= 的东西? Multi-line strings are fine in PHP。错误是一个额外的"
  • 连接,是一种在 sql 语句中没有太多空格的方法,因此 sql 保持清洁。这样做不是必须的。没有它们,同一个字符串中的所有内容也必须有效。
  • 服务器进程不关心空格,而编辑这段代码的人却充满了语法。一切都与优先事项有关。
  • 但是想象一下你打印你的 $sql 变量的内容,这样它就更干净了。但是,是的,我同意你的观点,一切都与优先事项有关。
  • 如果您检查 user_id 是一个整数,您不能在该选择中放入任何奇怪的东西,这就是 sanitize 的意思,并且代码不会受到 sql 注入的影响。但是,我刚刚编辑了答案,说最好使用准备好的语句。
猜你喜欢
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多