2015-12-04 22 views
0

Это таблица data в моей базе данных MySQL:Как распечатать последовательное значение из моей базы данных?

То, что я хочу сделать, это:

  • Если для id выходов no 01, 02 и 03, а затем распечатать последовательное значение и no 01. Если нет, напечатайте самый низкий недостающий no и самый низкий id, где значение отсутствует.

Пример1:

+-----------+ 
    | id | no | 
    +-----------+ 
    | 01 | 01 | 
    | 01 | 02 | 
    | 01 | 03 | 
    | 02 | 01 | 
    | 02 | 02 | 
    | 02 | 03 | 
    | 03 | 01 | 
    +-----------+ 

Результат Я желаю:

ID = 03, № = 02


Пример2:

+-----------+ 
    | id | no | 
    +-----------+ 
    | 01 | 01 | 
    | 01 | 02 | 
    | 01 | 03 | 
    | 02 | 01 | 
    | 02 | 02 | 
    | 02 | 03 | 
    +-----------+ 

Результат Я хочу:

ID = 03, № = 01


Я аль немного потерял с моим кодом:

$pdo = Database::connect();    
$sql = "SELECT `id`, `no` FROM `data`"; 
$q = $pdo->prepare($sql); 
$q->execute(); 
$result = $q->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_COLUMN); 

foreach ($result as $key => $value) { 
    if (in_array("01", $value) AND in_array("02", $value) AND in_array("03", $value)) { 
     echo "id="; 
     echo "0"; 
     echo $key + 1; 
     echo "<br>"; 
     echo "no=01"; 
     echo ","; 
    } else { 
     echo "id=".$key; 
     echo ","; 
     foreach ($value as $row => $number) { 
      echo "no=0"; 
      echo $number + 1; 
      echo ","; 
     } 
    } 
    echo "<br>";  
} 

Мой результат, например, 1:

id = 02, no = 01

id = 03, no = 01 не

ID = 03, нет = 02

И, например, 2:

ID = 02, нет = 01

ID = 03, нет = 01

+0

Пример 1 является простым , Он начинается с CROSS JOIN. Пример 2 сложнее, поскольку вы выбираете данные, которые вообще не существуют в базе данных. Тем не менее, он достаточно прост в изготовлении в этом случае. – Strawberry

ответ

0

Рассмотрим чистый SQL решение без условного цикла PHP. В частности, ниже, использует комбинацию из производной таблицы, случай /, когда логика и объединение запроса:

# RETURN EXISTING RECORDS AS IS 
SELECT data.`ID`, 
     data.`No` 
FROM data 

UNION 

# NEXT CONSECUTIVE ROW 
SELECT 
     CASE WHEN NextNo = 3 THEN NextID +1 ELSE NextID END As PHPID, 
     CASE WHEN NextNo = 3 THEN 1 ELSE NextNo + 1 END As PHPNo  
FROM 

    (SELECT data.`ID` As NextID, 
      data.`No` As NextNo 
     FROM data 
     ORDER BY data.`ID` DESC, data.`No` DESC 
     LIMIT 1) As dT 

Пример 1 ВЫХОД

ID No 
1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 

Пример 2 ВЫХОД

ID No 
1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
+0

Здравствуйте, большое вам спасибо, но, к примеру, мне нужен вывод: 'id = 03, no = 02' и, например, 2 Мне нужен вывод' id = 03, no = 01' – Jarla

+0

Только одна запись? Затем просто удалите верхний оператор SELECT из запроса объединения (включая 'UNION') – Parfait