繁体   English   中英

MySQL 查询以列出多列的 AZ

MySQL query to list A-Z for multiple columns

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个包含公司的数据库,每个公司在他们自己的列中都有不同的联系人姓名,名为

名字一个名字两个名字三个名字四个名字五个名字六个

我需要按第一个字母搜索所有名称,然后如果第一个字母匹配,则提取数据。 例如 Select nameone WHERE nameone == "B"。

然后我需要通过 ASC 订购,例如 Select nameone WHERE nameone == "B" ORDER BY ASC。

例如 T 的 output 将是 Tanya Tracey Trevor Tom

问题是它可能是几个匹配的名称的组合。 例如 Select nameone WHERE nameone == "B" OR WHERE nametwo == "B"。 因此,我需要能够通过 output 中的 AZ 订购它们(希望这是有道理的!)

例如,T 的 output 将是来自 nameone 的 Tanya Tracey 来自 nameone Trevor 来自 nametwo 来自 namethree 的 Tom

我正在使用 Mysqli,我认为这可能使用 CASE。 以下是我的查询。

// added ."%" so value becomes e.g. A% (to allow the LIKE clause and search for first letter only 
e.g. show all nameone or nametwo begining with A)
$value = $letter . "%";
// prepare query + bind values. 
$stmt = $mysqli -> prepare('SELECT id, displayname, nameone, nametwo, namethree, namefour, namefive, 
namesix FROM companies WHERE nameone LIKE ? OR nametwo LIKE ? OR namethree LIKE ? OR namefour LIKE ? OR 
namefive LIKE ? OR namesix LIKE ? ORDER BY (CASE WHEN nameone LIKE ? THEN nameone END) ASC, (CASE 
WHEN nametwo LIKE ? THEN nametwo END) ASC, (CASE WHEN namethree LIKE ? THEN namethree END) ASC, 
(CASE WHEN namefour LIKE ? THEN namefour END) ASC, (CASE WHEN namefive LIKE ? THEN namefive END) 
ASC, (CASE WHEN namesix LIKE ? THEN namesix END) ASC');

                        if (
                        $stmt &&
                        $stmt -> bind_param('ssssssssssss', $value, $value, $value, $value, $value, 
$value, $value, $value, $value, $value, $value, $value) &&
                        $stmt -> execute() &&
                        $stmt -> store_result() &&
                        $stmt -> bind_result($id, $displayname, $nameone, $nametwo, $namethree, 
$namefour, $namefive, $namesix)

但是,这似乎不起作用。 它按名称订购。 因此,例如,如果我搜索“T”,它将按 nameone 排序,然后如果在 nametwo 中找到“T”名称(比如 tyrone),它将把它放在列表的顶部而不是靠近底部。

到 output 我在 while 循环中使用下面的数据

<?php if (strtoupper($nameone[0]) == strtoupper($letter)) {
echo htmlspecialchars($nameone)."<br>";
} ?>
<?php if (strtoupper($nametwo[0]) == strtoupper($letter)) {
echo htmlspecialchars($nametwo)."<br>";
} ?>                                        
<?php if (strtoupper($namethree[0]) == strtoupper($letter)) {
echo htmlspecialchars($namethree)."<br>";
} ?>    
<?php if (strtoupper($namefour[0]) == strtoupper($letter)) {
echo htmlspecialchars($namefour)."<br>";
} ?> 
<?php if (strtoupper($namefive[0]) == strtoupper($letter)) {
echo htmlspecialchars($namefive)."<br>";
} ?>                                         
<?php if (strtoupper($namesix[0]) == strtoupper($letter)) {
echo htmlspecialchars($namesix)."<br>";
} ?> 

任何想法我做错了什么?

#

更新

刚刚意识到,如果我搜索例如“T”并且一个名为 Tanya 的名字在“nameone”列中,那么

CASE WHEN nameone LIKE? THEN nameone END

会很成功,反过来会停止查询(正确??)。 如果是这样,我将如何将查询中来自 nameone、nametwo、namethree 等的名称列表组合到 AZ 他们?

#

更新 2

试着让它更清楚。 我有一张像这样的桌子:

 --------------------------------------------------------------------- | nameone | nametwo | namethree | companyname | --------------------------------------------------------------------- | Troy | Alice | jane | SRS LTD | --------------------------------------------------------------------- | Simon | james | Trevor | LRP LTD | --------------------------------------------------------------------- | Spike | Tony | jon | Jones LTD | --------------------------------------------------------------------- | Luke | Chris | tom | LRP LTD | ---------------------------------------------------------------------

我会怎么说给我所有以 T 开头的名字然后 Az 他们?

例如

SELECT companyname, nameone, nametwo, namethree FROM companies WHERE any names 1st letter begings with T ORDER BY ASC

所以它会 output

  1. 汤姆
  2. 托尼
  3. 特雷弗
  4. 特洛伊
#

更新 3

这似乎有效(仍在测试)

 SELECT ID, displayname, nameone, nametwo, namethree, namefour, namefive, namesix FROM kelham WHERE nameone LIKE? OR nametwo LIKE? OR namethree LIKE? OR namefour LIKE? OR namefive LIKE? OR namesix LIKE? ORDER BY CASE WHEN nameone LIKE? THEN nameone WHEN nametwo LIKE? THEN nametwo WHEN namethree LIKE? THEN namethree WHEN namefour LIKE? THEN namefour WHEN namefive LIKE? THEN namefive WHEN namesix LIKE? THEN namesix END ASC');
问题暂未有回复.您可以查看右边的相关问题.
1 列出子查询中提到的表中的列(MySQL)

考虑三个表——演员、角色和电影 以下查询列出了电影“辛德勒的名单”中所有演员的名字和姓氏: 假设如果我想列出演员扮演的角色以及他们的名字和姓氏,获取所需结果集或输出的最佳查询是什么? 需要注意的是,角色是角色表中的一列,在子查询中。 ...

2 MySQL查询列出不同的值?

我无法使MySQL查询正常工作。 我想查询每个唯一'srcmac'(源MAC地址)的最新条目。 我可以用它来使用LINQ-MSSQL 这是一些示例数据 但我没有将它转换为MySQL。 这就是我到目前为止所拥有的 我得到的转储是 ...

2019-05-28 08:28:52 0 91   mysql
5 列出Smarty中的字母AZ

我正在搜索网络,但是我只找到了一个聪明的插件函数来显示从A到Z的字母。 在某些情况下,您无法添加新插件,那么如何显示它呢? ...

6 Mysql类字符[az]或零

在mysql表中,我有此信息的列。 问题很简单,我需要在mysql查询中找到所有记录数为10的记录。但是,如您在示例中看到的,不是10010等。 我知道这是一团糟,但记录必须以这种形式加载。 因此您一开始会有字元,有时是空格或零。 一个选项可以(手动)将数百个字符提取 ...

7 mysql按AZ递增顺序

我想在表格中添加一列 INT(10),根据列 a 到 7,该列显示为 1 到 x 数字应该是 = 按标题 ASC 排序 谢谢你 ...

2016-04-23 09:29:08 1 269   mysql
9 MYSQL - 列出特定列

我正在尝试编写一个列出SQL表中列的名称的查询,但是,我不想要所有列 - 只是特定的列。 所以,例如,如果我要将COMMENT ='test'放到我要列出的列中,那么我认为我的查询将是: 然而,这会引发错误。 有任何想法吗? 谢谢, ...

2014-10-20 10:50:59 2 934   mysql
10 mysql:列出所有表及其列

我试图创建所有表的列表,然后在mysql中创建它们的数据库列。 例如,如果我有两个表Table1和Table2以及它们各自的列,则我希望将输出显示为以下内容: 表1:col_1,col_2,col_3 表2:col_a,col_b,col_c,col_d 我已经写了这 ...

2017-11-18 22:53:57 1 55   mysql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM