我有一个包含 3 列的表格
---QID---TEXT---CID---
我想为每个不同的 CID 找到 20 行(QID 和 TEXT)。我已经准备好字符串 $cid 以便我可以使用 WHERE IN
语句。
SELECT * FROM questions q1
WHERE cid=(SELECT cid
FROM questions q2
WHERE q2.cid IN ($cids)
GROUP BY q2.cid)
ORDER BY q1.qid LIMIT 20
谢谢!
最佳答案
简单查询:
$query = 'SELECT QID, TEXT FROM yourDb.yourTable WHERE CID = '.$cid;
或者,如果 $cid
是一个数组:
$query = 'SELECT QID, TEXT FROM yourDb.yourTable WHERE CID IN('.implode(',',$cid).')';
获取结果:
$pdo = new PDO('mysql:host=yourDBServer','login','password');
if (!$stmt = $pdo->query($query))
{
die('query failed');
}
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
有关您可以使用 PDO 对象执行的操作的更多信息,请参阅 the manual
一个快速修复(但不是一个好的)可能是:
$q = 'SELECT QID, TEXT FROM yourDB.yourTB WHERE CID = '.$cid.' LIMIT 20';
在 CID IN(1,2,3)
的情况下,我不确定是否有一种简单的方法可以做到这一点。我能想到的就是使用工会。梅比this page可以帮你解决这个问题。
一个错误的修复可能是 ORDER BY CID ASC
,而不是使用 fetchAll()
,这样做:
$query = 'SELECT CID,QID, TEXT FROM yourDb.yourTable WHERE CID IN('.implode(',',$cid).')';
//execute query, same as above: $stmt holds results
$results = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
if (!is_array($results[$row['CID']))
{
$results[$row['CID']] = array();
}
if (count($results[$row['CID']]) < 20)
{
$results[$row['CID']][] = $row;
}
}
这样,$results
数组将为找到的每个 CID
设置一个键,该键的值将是一个最多包含 20 条记录的数组。 ..
关于php - MySql 为每个 id 查找多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171588/