สอบถามการปรับข้อมูลจากตาราง sql

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

สอบถามการปรับข้อมูลจากตาราง sql

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

ผมกำลังปรับข้อมูลในตาราง ในตารางจะเก็บข้อมูลนักเตะและจะมีตารางหนึ่งที่เก็บของข้อมูลเบอร์ของนักเตะทัวนาเม้นต่างๆ ครับ จะปรับชื่อนักเตะมีรายชื่อซ้ำกันให้มีชื่อเดียวและในตารางเก็บเบอร์และทัวนาเม้นต์นั้นๆ ครับ

ซึ่งตอนนี้ติดปัญหา จำนวนนักเตะกับเบอร์ของนักเตะมันเยอะแปลงๆ ครับ ในโค้ดนี้มีจุดควรที่ต้องปรับบ้างครับ
Programming - PHP-2.png
Programming - PHP-2.png (10.47 KiB) Viewed 1500 times
Programming - PHP-3.png
Programming - PHP-3.png (12.04 KiB) Viewed 1500 times

โค้ด: เลือกทั้งหมด

$sql = "SELECT * FROM tools_lineup_players";
$result = mysqli_query($con, $sql);
while ($row = mysqli_fetch_assoc($result)) {

    $play_id = $row['play_id'];
    $team_id = $row['team_id'];
    $play_name_th = mysqli_real_escape_string($con, $row['play_name_th']);
    $play_name_en = mysqli_real_escape_string($con, $row['play_name_en']);
    $play_num = $row['play_num'];
    $play_img = $row['play_img'];

    $check_existing_players = "SELECT * FROM `tools_lineup_players` WHERE `play_name_th` LIKE '%".$play_name_th."%' OR `play_name_en` LIKE '%".$play_name_en."%'";
    $result_playersl = mysqli_query($con, $check_existing_players);
    $id = array();
    $images = '';
    $play_name_th = '';
    $play_name_en = '';
    while( $row_existing = mysqli_fetch_assoc($result_playersl)) {
      $id[] = $row_existing['play_id'];
      if ($row_existing['play_img'] != ''){
        $images = $row_existing['play_img'];
      }
      $num[] = $row_existing['play_num'];
      $num_team[] = $row_existing['team_id'];
      $play_name_th = $row_existing['play_name_th'];
      $play_name_en = $row_existing['play_name_en'];
    }

    $delete_player_query = "DELETE FROM tools_lineup_players WHERE play_id IN ('". implode("', '", $id) ."')";
    echo $delete_player_query;
    mysqli_query($con, $delete_player_query);

    $team_id = 0;
    $play_num = 0;

    $insert_new_player = "INSERT INTO tools_lineup_players (team_id, play_name_th, play_name_en, play_num, play_img) VALUES ($team_id, '$play_name_th', '$play_name_en', '$play_num', '$images')";

    $result_playersl = mysqli_query($con, $insert_new_player);
    $new_play_id = mysqli_insert_id($con);

    $insert_new_number = "INSERT INTO tools_lineup_tournament_player_number (play_id, player_number, team_id) VALUES (?, ?, ?)";
    $stmt_insert = mysqli_prepare($con, $insert_new_number);
    for($x = 0; $x < count($num_team); $x++)  {
      mysqli_stmt_bind_param($stmt_insert, "iii", $new_play_id , $num[$x], $num_team[$x]);
      mysqli_stmt_execute($stmt_insert);
    }
}
ตารางนักเตะ

โค้ด: เลือกทั้งหมด

CREATE TABLE IF NOT EXISTS `tools_lineup_players` (
  `play_id` int(11) NOT NULL AUTO_INCREMENT,
  `team_id` int(11) NOT NULL,
  `play_name_th` varchar(200) NOT NULL,
  `play_name_en` varchar(200) NOT NULL,
  `play_num` int(20) NOT NULL,
  `play_img` varchar(200) NOT NULL,
  PRIMARY KEY (`play_id`),
  KEY `add foreignkey team_id` (`team_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3775 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
ตารางเก็บเบอร์เสื้อประจำทัวร์นาเม้น

โค้ด: เลือกทั้งหมด

CREATE TABLE IF NOT EXISTS `tools_lineup_tournament_player_number` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ไอดี',
  `play_id` int(11) NOT NULL COMMENT 'ไอดีของนักเตะ',
  `player_number` int(20) NOT NULL COMMENT 'เบอร์เสื้อประจำทัวร์นาเม้น',
  `team_id` int(11) NOT NULL COMMENT 'ไอดีทีม',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ตารางเก็บเบอร์เสื้อประจำทัวร์นาเม้น';
:gfb:
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอบถามการปรับข้อมูลจากตาราง sql

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

ใช้วิธีการกรองข้อมูลก่อนค่อยมาปรับตาราง sql
:gfb:
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอบถามการปรับข้อมูลจากตาราง sql

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

โค้ด: เลือกทั้งหมด

$sql = "SELECT *, GROUP_CONCAT(play_num) AS play_num_list FROM tools_lineup_players GROUP BY `play_name_th`";
$result = mysqli_query($con, $sql);

while ($row = mysqli_fetch_assoc($result)) {

    $play_id = $row['play_id'];
    $play_num_list = $row['play_num_list'];
    $team_id = $row['team_id'];
    $play_name_th = mysqli_real_escape_string($con, $row['play_name_th']);
    $play_name_en = mysqli_real_escape_string($con, $row['play_name_en']);
    $play_num = $row['play_num'];
    $play_img = $row['play_img'];

    $team_id_0 = 0;
    $play_num_0 = 0;

    $insert_new_player = "INSERT INTO tools_lineup_players (team_id, play_name_th, play_name_en, play_num, play_img) VALUES ($team_id_0, '$play_name_th', '$play_name_en', '$play_num_0', '$play_img')";
    $result_playersl = mysqli_query($con, $insert_new_player);
    $new_play_id = mysqli_insert_id($con);
    
    $play_num_list = explode(',', $play_num_list);
    for ($x = 0; $x < count($play_num_list); $x++) {
      $insert_new_number = "INSERT INTO tools_lineup_tournament_player_number (play_id, player_number, team_id) VALUES ($new_play_id, $play_num_list[$x], $team_id)";
      $stmt_insert = mysqli_query($con, $insert_new_number);

    }


    if ($row['play_id'] == 3774) {
      $delete_player_query = "DELETE FROM `tools_lineup_players` WHERE `play_id` BETWEEN 1 AND 3774";
      mysqli_query($con, $delete_player_query);
      break;
    }
    
}
ยังมีชื่อซ้ำอยู่ครับ
Programming - PHP-1.png
Programming - PHP-1.png (65.05 KiB) Viewed 1469 times
:gfb:
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอบถามการปรับข้อมูลจากตาราง sql

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

Thanapoom1514 เขียน: 01/12/2023 5:19 pm

โค้ด: เลือกทั้งหมด

$sql = "SELECT *, GROUP_CONCAT(play_num) AS play_num_list FROM tools_lineup_players GROUP BY `play_name_th`";
$result = mysqli_query($con, $sql);

while ($row = mysqli_fetch_assoc($result)) {

    $play_id = $row['play_id'];
    $play_num_list = $row['play_num_list'];
    $team_id = $row['team_id'];
    $play_name_th = mysqli_real_escape_string($con, $row['play_name_th']);
    $play_name_en = mysqli_real_escape_string($con, $row['play_name_en']);
    $play_num = $row['play_num'];
    $play_img = $row['play_img'];

    $team_id_0 = 0;
    $play_num_0 = 0;

    $insert_new_player = "INSERT INTO tools_lineup_players (team_id, play_name_th, play_name_en, play_num, play_img) VALUES ($team_id_0, '$play_name_th', '$play_name_en', '$play_num_0', '$play_img')";
    $result_playersl = mysqli_query($con, $insert_new_player);
    $new_play_id = mysqli_insert_id($con);
    
    $play_num_list = explode(',', $play_num_list);
    for ($x = 0; $x < count($play_num_list); $x++) {
      $insert_new_number = "INSERT INTO tools_lineup_tournament_player_number (play_id, player_number, team_id) VALUES ($new_play_id, $play_num_list[$x], $team_id)";
      $stmt_insert = mysqli_query($con, $insert_new_number);

    }


    if ($row['play_id'] == 3774) {
      $delete_player_query = "DELETE FROM `tools_lineup_players` WHERE `play_id` BETWEEN 1 AND 3774";
      mysqli_query($con, $delete_player_query);
      break;
    }
    
}
ยังมีชื่อซ้ำอยู่ครับ
Programming - PHP-1.png
ติดตรงที่มีชื่อซ้ำและมีกรณีใน database มีชื่อแค่ชื่อจริง แต่ไม่มีนามสกุลกับชื่อที่มีเว้นวรรคเยอะๆ ต้องการเก็บชื่อนักเตะ และอีกตารางเก็บไอดีนักเตะ, เบอร์นักเตะ และไอดีทีม
Programming - PHP-1.png
Programming - PHP-1.png (17.14 KiB) Viewed 1464 times
:gfb:
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอบถามการปรับข้อมูลจากตาราง sql

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

โค้ด: เลือกทั้งหมด

$sql = "SELECT *, GROUP_CONCAT(play_num) AS play_num_list, GROUP_CONCAT(team_id) AS team_ids, REPLACE(play_name_th, ' ', '') AS play_name_full FROM tools_lineup_players GROUP BY `play_name_th` ORDER BY `team_id` ASC";
$result = mysqli_query($con, $sql);
$name = array();
while ($row = mysqli_fetch_assoc($result)) {
  $name[$row['play_name_th']] = array('play_id' => $row['play_id'],
                                    'team_id' => $row['team_ids'],
                                    'play_name_th' => $row['play_name_th'],     
                                    'play_name_en' => $row['play_name_en'],
                                    'play_num_list' => $row['play_num_list'],
                                    'play_img' => $row['play_img']   
                                  );
}
// print_r($name);exit;
foreach ($name as $item) {
  $insert_new_player = "INSERT INTO tools_lineup_players_2 (team_id, play_name_th, play_name_en, play_num, play_img) VALUES (0, ?, ?, '0', ?)";
  
  $play_name_th = $item["play_name_th"];
  $play_name_en = $item["play_name_en"];
  $play_img = $item["play_img"];
  $team_id = $item["team_id"];
  
  $stmt = mysqli_prepare($con, $insert_new_player);
  mysqli_stmt_bind_param($stmt, "sss", $play_name_th, $play_name_en, $play_img);
  
  
  mysqli_stmt_execute($stmt);
  mysqli_stmt_close($stmt);

  $new_play_id = mysqli_insert_id($con);
  $play_num_list = explode(',', $item['play_num_list']);
  $team_id  = explode(',', $team_id);
  for ($x = 0; $x < count($play_num_list); $x++) {
    $insert_new_number = "INSERT INTO tools_lineup_tournament_player_number (play_id, player_number, team_id) VALUES ($new_play_id, $play_num_list[$x], $team_id[$x])";
    $stmt_insert = mysqli_query($con, $insert_new_number);

  }
}

mysqli_close($con);
ตอนนี้กลายเป็นมีไอดีกับเบอร์ซ้ำครับของนักเตะ
Programming - PHP-1.png
Programming - PHP-1.png (10.42 KiB) Viewed 1376 times
:gfb:
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 30