从mySQL表中我想确定最常用的起始字母;例如,如果列表是:
预期的结果最终会让我确定:
有没有办法在不运行26个查询的情况下执行此操作,例如:
WHERE myWord LIKE 'a%'
WHERE myWord LIKE 'b%'
...
WHERE myWord LIKE 'y%'
WHERE myWord LIKE 'z%'
我发现这个SO question让我觉得我可以分两步完成:
如果我没有弄错的话,方法是首先使用此SO Answer的方法建立所有首字母的列表:
SELECT DISTINCT LEFT(word_name, 1) as letter, word_name FROM word GROUP BY (letter) ORDER BY letter
我希望它看起来像:
...然后查询该列表。为此,我将根据此SO question将新列表存储为临时表,如:
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
并根据此SO question查询Magnitude,例如。
SELECT column, COUNT(*) AS magnitude FROM table GROUP BY column ORDER BY magnitude DESC LIMIT 1
这是一种明智的做法吗?
注意:
有时候,在写这个问题时,我想我想出了一条前进的道路,但我还没有工作代码。我稍后会使用可能有效或需要帮助的代码更新问题。
同时我感谢任何反馈,指针,建议的答案。
最后,我正在使用PHP,PDO,mySQL。
TIA
对于它的价值而言,有一种更简单的方法,这是我最终得到的结果,感谢两位花时间回答:
$stmt_common2 = $pdo->prepare('SELECT COUNT(*) as occurence,SUBSTRING(word,1,1) as letter
FROM words
GROUP BY SUBSTRING(word,1,1)
ORDER BY occurence DESC, letter ASC
LIMIT 1');
$stmt_common2->execute();
$mostCommon2 = $stmt_common2->fetchAll();
echo "most common letter: " . $mostCommon2[0]['letter'] . " occurs " . $mostCommon2[0]['occurence'] . " times)<br>";
答案 0 :(得分:3)
您可以使用此简单查询来实现
SELECT COUNT(*) as occurence,SUBSTRING(word_name,1,1) as letter
FROM word
GROUP BY SUBSTRING(word_name,1,1)
ORDER BY occurence DESC, letter ASC
LIMIT 1