PHP / MySQL nasıl iki MySQL tablo eklemek ve ya güncellemek için?

1 Cevap php

Ben nasıl PHP ve MySQL kullanarak benim iki veritabanı tabloları güncelleyebilirsiniz merak ediyorum? Ben denilen ikinci bir tablo eklemek istediğiniz tags_2 bu etiket zaten var olmadığını kontrol edecek ve bu tabloda mevcut saymak eklemek ve etiket yoksa tabloya eklemek yoksa.

Ben doğru açıkladı umut?

Temelde bu nedense bütün gün beni şaşkına olan doğru yerlerde doğru kodu ekleyerek yardıma mı ihtiyacınız var? Ben çalışmak için ilk tablo var ama ikinci değil?

İşte aşağıda benim MySQL tablo olduğunu.

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
page TEXT NOT NULL,
tag VARCHAR(255) NOT NULL,
count INT NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE tags_2 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag VARCHAR(255) NOT NULL,
count INT NOT NULL,
PRIMARY KEY (id)
);

Ve İşte aşağıda benim PHP betik.

<?php 

require_once ('./mysqli_connect.php');

if (isset($_POST['submitted'])){

		$mysqli = new mysqli("localhost", "root", "", "sitename");
		$dbc = mysqli_query($mysqli,"SELECT * FROM tags");
	if (!$dbc) {
		print mysqli_error($mysqli);
	}

$page = $_SERVER['SCRIPT_FILENAME'];

$tag = mysqli_real_escape_string($mysqli, $_POST['tag']);

$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id, count, page FROM tags WHERE tag='$tag' AND page = '$page'");

if(mysqli_num_rows($dbc)){
  $tag_info = mysqli_fetch_array($dbc);
  $tag_info_id = $tag_info["id"];
  $tag_info_count = $tag_info["count"] + 1;

  $mysqli = new mysqli("localhost", "root", "", "sitename");
  $dbc = mysqli_query($mysqli,"UPDATE tags SET count='$tag_info_count' WHERE id='$tag_info_id'");

  echo "$tag now with $tag_info_count instances";
} else {
  $mysqli = new mysqli("localhost", "root", "", "sitename");
  $clean_url = mysqli_real_escape_string($mysqli, $page);
  $dbc = mysqli_query($mysqli,"INSERT INTO tags (tag, count, page) VALUES ('$tag', 1, '$clean_url')");

if (!$dbc) {
		print mysqli_error($mysqli);
}
echo "1 record added";
}
mysqli_close($mysqli);
}
?>

Tabloları bu şekilde daha iyi görünecektir.

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
page TEXT NOT NULL,
tag VARCHAR(255) NOT NULL,
count INT NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE tags_2 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag_id INT UNSIGNED NOT NULL DEFAULT 0, 
tag VARCHAR(255) NOT NULL,
count INT NOT NULL,
PRIMARY KEY (id)
);

1 Cevap

Öncelikle, sizin şema normalize değildir. Tek bir tabloda etiketleri ile ilgili tüm verileri koyun. Başka bir tablodaki sayfalar hakkındaki verileri koydu. Sayfalar tabloda, etiketleri tablonun birincil anahtarına başvuran yabancı anahtar şunlardır:

CREATE TABLE pages(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
page TEXT NOT NULL,
tag_id INT UNSIGNED,
tag_count INT NOT NULL DEFAULT 0, //count is a reserved word
PRIMARY KEY (id),
FOREIGN KEY (tag_id) REFERENCES tags(id)
                      ON DELETE RESTRICT

);

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

Sonra, pseudocode, sizin sorgular hale gelir:

$var= SELECT id FROM tags WHERE tag='somestring';
if $var!=0 { 
  UPDATE pages SET tag_id=$var, 
                   tag_count=tag_count+1 
  WHERE page_id='a page id';
}