【问题标题】:Query MySQL by alphanumeric & first 15按字母数字和前 15 位查询 MySQL
【发布时间】:2014-05-20 18:55:40
【问题描述】:

我需要一些帮助来编写 MySQL 查询。它需要查看所有记录,然后按字母数字范围内的第一个字母对它们进行排序(例如数字和 A-C,然后仅在 $results 中返回前 15 个(按字母数字顺序)

要搜索的字段是“姓名”

显示全部的简单结果(我认为 15 个限制是正确的)- 如何修改它?

$results = DB::query("SELECT * FROM Mytable ORDER BY ? DESC LIMIT 15");

对于 Alpha 范围:

$results = DB::query("SELECT substr(theme, 1, 1) as Alphabet
  FROM gallery ORDER BY (CASE theme
  WHEN '1%' THEN 1
  WHEN '2%' THEN 2
  WHEN '3%' THEN 3
  WHEN 'A%' THEN 4
  WHEN 'B%' THEN 5
  ELSE -1
  END) LIMIT 15");

得到:错误:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 ') LIMIT 15' 附近使用的正确语法

我做错了什么 - 尝试列出 1-3,然后是 A-B。

更新 2:在上面更正的查询中,我有一个简单的 foreach 来分配变量,然后在内容中有变量回显:

$x = 0
foreach ($results as $row) {
  $x++;
  if ($x == 1) {  // first in query
    $t1 = $row['theme'];
    $d1 = $row['developer'];
    $th1 = $row['thumb'];
  }
  ...
}

什么都没有显示,在分配变量时我需要做些什么不同的事情吗?

更新 3:你是这个意思吗?仍然没有显示。

$x = 0
while ($row = mysql_fetch_array($results)) {
  $x++;
  if ($x == 1) {  // first in query
    $t1 = $row['theme'];
    $d1 = $row['developer'];
    $th1 = $row['thumb'];
  }
  ...
}

回声前。在正文中:

<img src="<?php echo($th1); ?>" alt="<?php echo($t1); ?>" />
<span><p class="hname"><?php echo($t1); ?></p>
<p class="hdev"><?php echo($d1); ?></p></span>

【问题讨论】:

  • 我忘记在原始查询中添加“END”。请参阅更新。
  • 请不要在 cmets 中添加代码,编辑您的帖子并在其中添加该代码。
  • 好的,将代码移到帖子中。
  • 任何时候如果您有基于另一篇帖子的新问题,您应该提出一个新问题,并附上指向该帖子的链接。话虽如此(现在不要这样做)它应该是while($row = mysql_fetch_array($result)) {...
  • 请参阅 Update3 问题。还是不显示。

标签: php mysql sql sql-order-by


【解决方案1】:

这样做 -

$results = DB::query("SELECT * FROM Mytable ORDER BY name DESC LIMIT 15");

您可能不应该有一个名为“名称”的列。您使用的系统通常会保留这些类型的通用词。

如果您需要更专业的内容,例如限制字母表的某个部分,您的查询开始变得更加复杂。

SELECT substr(name, 1, 1) as Alphabet
FROM MyTable
ORDER BY (CASE name
    WHEN 'D%'    THEN 1
    WHEN 'E%'    THEN 2
    WHEN 'F%'    THEN 3
    ELSE -1
    END
)
LIMIT 15

在我的脑海中立即执行语法,您将不得不测试您的情况。

【讨论】:

  • alpha 范围改成 D-F 怎么改?
  • 当它开始变得专业化时,查询变得更加复杂。我在回答中添加了一个示例。
  • 抱歉,Jay,我在您的回答中没有看到其他示例;)
  • 它现在就在那里。你想用你的查询来完成什么?
  • DEF 与第一个类似,将查询限制为以这些字母开头的字段,然后进一步限制为前 15 个 - 显然必须将 DESC LIMIT 15 添加到您的专业末尾查询 - 感谢您的帮助。
猜你喜欢
  • 2014-07-09
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多