الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طلب تعديل على استعلام

بدأه man in dark في 24 فبراير 2009 · 19 رد · 1,001 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني اريد مساعدتكم في التعديل على هذا الاستعلام

بحيث يظهر عدد الارقام المتشابها


$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="t1"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$query = "SELECT t1.*, t2.*
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);

$query2 = "SELECT t1.*, t3.*
FROM t1, t3
WHERE
t1.w1 = t3.w3";
$results2 = mysql_query($query2) or die(mysql_error());
$num2= mysql_num_rows($results2);

?>
</head>
<body>

<p><img src="/images/1.gif" /><b>العدد الاول
<?php $num= mysql_num_rows($results);
echo $num; ?></b></p>

<p><img src="http://www.swalif.net/softs/images/2.gif" /><b>العدد الثاني
<?php $num2= mysql_num_rows($results2);
echo $num2; ?></b></p>
</body>
 <?php

واستخدمته بهذه الطريقة


$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="t1"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$query = "SELECT t1.*, t2.*
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);

$query2 = "SELECT t1.*, t3.*
FROM t1, t3
WHERE
t1.w1 = t3.w3";
$results2 = mysql_query($query2) or die(mysql_error());
$num2= mysql_num_rows($results2);

?>
</head>
<body>

<p><img src="/images/1.gif" /><b>العدد الاول
<?php echo $num; ?></b></p>

<p><img src="http://www.swalif.net/softs/images/2.gif" /><b>العدد الثاني
<?php echo $num2; ?></b></p>
</body>
 <?php

بحيث انه لا يظهر رسالة خطاء

قاعدة البيانات


-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- المزود: localhost
-- أنشئ في: 22 فبراير 2009 الساعة 21:45
-- إصدارة المزود: 5.0.22
-- PHP إصدارة: 4.4.4
--
-- قاعدة البيانات: `test`
--

-- --------------------------------------------------------

--
-- بنية الجدول `t1`
--

CREATE TABLE `t1` (
`w1` varchar(2000) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1256;

--
-- إرجاع أو إستيراد بيانات الجدول `t1`
--

INSERT INTO `t1` (`w1`) VALUES
('11111'),
('456456');

-- --------------------------------------------------------

--
-- بنية الجدول `t2`
--

CREATE TABLE `t2` (
`w2` varchar(2000) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1256;

--
-- إرجاع أو إستيراد بيانات الجدول `t2`
--

INSERT INTO `t2` (`w2`) VALUES
('697867'),
('8798'),
('11111'),
('789789');

-- --------------------------------------------------------

--
-- بنية الجدول `t3`
--

CREATE TABLE `t3` (
`w3` varchar(2000) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1256;

--
-- إرجاع أو إستيراد بيانات الجدول `t3`
--

INSERT INTO `t3` (`w3`) VALUES
('4564578'),
('78978');
 -- phpMyAdmin SQL Dump

#2

ياليت توضح اكثر المطلوب

الان الموقع يطبع مرات التكرار بين الجدول الاول والثاني ثم الاول والثالت (هذا صحيح؟)

مالهدف من التعديل؟ وهل الكود حاليا يعمل؟

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#3

اخي الكود لا يعمل

انا الذي اريده مثل ما قلت اخي

ان يطبع مرات التكرار بين الجدول الاول والثاني ثم الاول والثالت

بس لا ادري لماذا لم يعمل الكود بحيث انني تاكدت من البيانات المتكررة في قاعدة

#4

استخدم

$query = "SELECT count(*)
FROM t1, t2
WHERE
t1.w1 = t2.w2";

وبدل mysql_num_rows سوي pop وشوف العدد اللي يطلع معك

على اي حال هذا الاسلوب الافضل حتى تقلل تكلفة الاستعلام

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#5

حل رائع أخي Ryn

وفقك الله :) عجبي الحل صراحة بسيط وخفيف

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#6

اخواني اعذروني على التاخير

الكود Ryn رائع جدا

ولكن انا اريد ان اعرف السبب لماذا لم يعمل هذا الاستعلام لانني اريده ان استخدمه في اظهار البيانات المتكررة

$query = "SELECT t1.*, t2.*
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);
#7

اعتقد المشكلة في

SELECT t1.*, t2.*

غيرها الى

select *

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#8

أخي Ryn

لقد عدلت ولكن لم يعمل ايضا

الان يظهر لي ان الارقام المتشابها 1 فقط مع انني تاكد من قاعدة البيانات ووجدت انه اكثر من واحد

#9

ممكن تكتب الكود بعد التعديل

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#10

الكود

$query = "select *
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);

او

$query = "SELECT t1.*, t2.*
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);

كلها نفس النتيجة

تم تعديل هذه المشاركة بواسطة man in dark في 26 فبراير 2009 في 17:38

#11

شغلت الكود عندي، كان فيه تكرار بين الاول والثاني

لكن مافيه بين الاول والثالث!! اذا كانت نفس المشكله عندك... السبب انه مافيه تكرار بين الاول والثالث...

4564578

456456

قريبين من بعض لكن.. فيه اختلاف !

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#12

لدي لا يظهر تكرار ابداً

#13

الكود المستخدم عندي

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="t1"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$query = "SELECT t1.*, t2.*
FROM t1, t2
WHERE
t1.w1 = t2.w2";
$results = mysql_query($query) or die(mysql_error());
$num= mysql_num_rows($results);

$query2 = "SELECT t1.*, t3.*
FROM t1, t3
WHERE
t1.w1 = t3.w3";
$results2 = mysql_query($query2) or die(mysql_error());
$num2= mysql_num_rows($results2);

?>
</head>
<body>

<p><img src="/images/1.gif"  /><b>العدد الاول
		 <?php echo $num; ?></b></p>

<p><img src="http://www.swalif.net/softs/images/2.gif" /><b>العدد الثاني
		 <?php echo $num2; ?></b></p>
</body>

قاعدة البيانات

-- phpMyAdmin SQL Dump
-- version 2.6.0-rc1
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generation Time: Feb 27, 2009 at 03:20 PM
-- Server version: 4.0.20
-- PHP Version: 4.3.8
-- 
-- Database: `test`
-- 

-- --------------------------------------------------------

-- 
-- Table structure for table `t1`
-- 

CREATE TABLE `t1` (
  `w1` varchar(200) NOT NULL default ''
) TYPE=MyISAM;

-- 
-- Dumping data for table `t1`
-- 

INSERT INTO `t1` VALUES ('11111');
INSERT INTO `t1` VALUES ('456456');

-- --------------------------------------------------------

-- 
-- Table structure for table `t2`
-- 

CREATE TABLE `t2` (
  `w2` varchar(200) NOT NULL default ''
) TYPE=MyISAM;

-- 
-- Dumping data for table `t2`
-- 

INSERT INTO `t2` VALUES ('697867');
INSERT INTO `t2` VALUES ('8798');
INSERT INTO `t2` VALUES ('11111');
INSERT INTO `t2` VALUES ('789789');

-- --------------------------------------------------------

-- 
-- Table structure for table `t3`
-- 

CREATE TABLE `t3` (
  `w3` varchar(200) NOT NULL default ''
) TYPE=MyISAM;

-- 
-- Dumping data for table `t3`
-- 

INSERT INTO `t3` VALUES ('4564578');
INSERT INTO `t3` VALUES ('78978');

اي نسخة من mysql تستخدم؟

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#14

الف شكر اخي Ryn اتعبتك معي

لقد جربت الكود الذي و ضعته وهو يعمل 100% جزاك الله الف خير

#15

اخي Ryn

لقد عرفت مين اين المشكلة ولكن لم اعرف كيف احلها

المشكلة عند رفع ملف txt بكود رفع الملفات فان يخزن في قاعدة البيانات

ولكي يعمل كود اظهار الارقام المتشابة يجب علي الدخول على الجدول الذي رفعت عليه ملف txt

واسوي updata حقل حقل يعني اضغط على تعديل ومن ثم تنفيذ

ومن ثم يظهر لي إستعلام-SQL

UPDATE `t1` SET `w1` = '1111' WHERE CONVERT( `t1`.`w1` USING utf8 ) = '1111\r\n' LIMIT 1

ويعمل الكود بعدها

كود رفع ملف txt

<?php
ini_set('memory_limit', 32 * 1024 * 1024);
ini_set("max_execution_time", "2000000");
mysql_connect("localhost", "root", "");
mysql_select_db("test");
if($_FILES['filedata']['tmp_name'])
{
$tmpName  = $_FILES['filedata']['tmp_name'];
$fo = fopen($tmpName,"r");
  while(! feof($fo)){
	 $w1= fgets($fo);
   $result = mysql_query("INSERT INTO `t1` VALUES ('$w1')");
   }
if($result)
{
 echo "successfully";
}
else
{
 echo "erro";
}

   }
?>

تم تعديل هذه المشاركة بواسطة man in dark في 28 فبراير 2009 في 13:19

#16

طبعا الكود هذا خطرد اذا كان اي احد ممكن يرفع الملفات... لذلك اضفت add_slashes

<?php
ini_set('memory_limit', 32 * 1024 * 1024);
ini_set("max_execution_time", "2000000");
mysql_connect("localhost", "root", "");
mysql_select_db("test");
if($_FILES['filedata']['tmp_name'])
{
$tmpName  = $_FILES['filedata']['tmp_name'];
$fo = fopen($tmpName,"r");
  while(! feof($fo)){
	 $w1= addslashes(trim(fgets($fo)));
   $result = mysql_query("INSERT INTO `t1` VALUES ('$w1')");
   }
if($result)
{
echo "successfully";
}
else
{
echo "erro";
}

   }
?>

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#17

اخي Ryn

اتعبتك معي سؤال اخير

بالنسبه للكود الذي عدلت علية بإضافة add_slashes

الكود يعمل ولكن عند رفع ملف txt يحتوي على :::::

11111111

22222222

22222222

يخزن في قاعدة البيانات فقط :::::

11111111

22222222

ومن المفترض انه يخزن الملف كامل حتى اذا كان يوجد تكرار :::::::::

11111111

22222222

22222222

#18

اضفت addslashes لسبب امني.

حل المشكلة كان trim

ممكن تجرب مثلا

333

333

444

وتقول لي بسرعة ايش يصير معك؟ انا في العمل وما عندي php server

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#19

لقد جربت يخزن في قاعدة البيانات ::::::

333

444

ومن المفترض انه يخزن ::::::

333

333

444

#20

باعتقادي واحد من سببين

- الحقل هذا primary key او unique و قاعدة البيانات لاتقبل تكرار فيه

او

- انت تقوم بحذف التكرار عند استعراض البيانات بطريقة معينه؟

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

مواضيع مشابهة