簡體   English   中英

獲取所有行具有相同列值的mysql數據

[英]Getting mysql data where all rows have same column value

我想獲得所有具有相同零件價值的行,例如

1. lesson 1 part=1
2. lesson 1.1 part=1
3. lesson 2 part=2

我想上課1和1.1,因為它們的部分相等

wl - What lesson from math
lessons - first table
ls - second table
lid - lesson id from lessons table
Just to get non seen lessons.

"SELECT * FROM lessons 
WHERE wl='$math' 
AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0') 
GROUP BY part LIMIT 2";

因為這只是為了查找記錄,所以足以獲取每個零件的ID列表,您可以使用GROUP_CONCAT

SELECT part, GROUP_CONCAT(id) as ids
FROM lessons 
WHERE wl='$math' 
AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0') 
GROUP BY part
HAVING COUNT(*) > 1;

如果要每個零件和ID行,那將更加困難。 此類問題通常可以通過解析函數解決,但MySQL尚未提供這些功能。 這使得有必要寫兩次查詢的一部分。

這是為用戶提供看不見的課程的方法:

SELECT *
FROM lessons 
WHERE wl='$math' 
AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0');

這就是您如何獲得在結果中多次出現的零件的方法:

SELECT part 
FROM lessons 
WHERE wl='$math' 
AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0') 
GROUP BY part
HAVING COUNT(*) > 1;

兩者結合:

SELECT *
FROM lessons 
WHERE wl='$math' 
AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0')
AND part IN
(
  SELECT part 
  FROM lessons 
  WHERE wl='$math' 
  AND id IN(SELECT lid FROM ls WHERE fid='$user' AND seen='0') 
  GROUP BY part
  HAVING COUNT(*) > 1
);

對於您的條件“我需要2個相同的字符, 因為它們只能具有2個相同的字符 -使用以下查詢:

SELECT 
    id, part
FROM 
    lessons 
WHERE 
    id REGEXP
    (SELECT 
        group_concat(id separator '|')
    FROM 
        lessons 
    WHERE 
        wl='$math' 
        AND id IN (SELECT lid FROM ls WHERE fid='$user' AND seen='0') 
    GROUP BY part
    HAVING count(part) = 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM