我正在尝试执行一个选择 mike
的查询,如果它不在关键字的三个最高出价中 . 应选择第4行和第7行 .
所以在最后,如果迈克不是关键字的三个最高出价,那么选择 .
我该如何解决这个问题?有子查询?
$construct = "SELECT child.* FROM `temp-advertise` child
LEFT JOIN `temp-advertise` parent on child.keyword=parent.keyword
WHERE child.name='mike'
ORDER BY child.id DESC";
id | name| keyword | bid |
1 | mike| one | 7 |
2 | tom | one | 4 |
3 | ced | one | 6 |
4 | mike| two | 1 |
5 | tom | two | 5 |
6 | har | two | 5 |
7 | mike| one | 3 |
8 | har | two | 3 |
4 回答
您的结构看起来不太有希望,也不是您的样本数据 . 然而,那就是说,你想知道“迈克”是否在每个关键词的前三位......并且他有3个出价...... 2个用于“一个”,1个用于“两个” . 从原始数据来看,迈克在“一个”关键字中位居第一,第四位,“二”关键字位居第四位 .
这可以为您提供所需的一些方面,而不是对所有关键字进行完整查询 . 第一个最里面的查询是通过“mike”获得关键字出价(因此别名为“JustMike”) . 然后将其加入到ONLY THOSE关键字的临时广告中 .
接下来,通过使用MySQL变量,我们可以跟踪PER KEYWORD的等级 . 诀窍是ORDER BY子句需要以表示正确排名的顺序返回它们 . 在这种情况下,首先是每个关键字,然后是每个关键字,首先按最高出价排序 .
通过查询记录,然后使用@variables,我们增加计数器,每次关键字更改时从1开始,然后将关键字保存到@grpKeyword变量中,以便比较下一条记录 . 一旦针对相应的关键字处理了所有出价,它就会查询该结果,但仅针对“迈克”的出价 . 这些记录将具有他的排名位置 .
(上面运行只是预览结果...应显示3条记录)
因此,如果您想知道它是否位于关键字的前3位,您可以更改为
试试这个:
尝试