Sorgulama

PHPPHP

Öğrenci
Katılım
28 Haziran 2012
Mesajlar
47
Reaksiyon puanı
0
Puanları
6
$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'");

$sorgu = mysql_query("SELECT * FROM test where kullaniciadi = '$kullaniciadi'");
$row= mysql_num_rows($sorgu);
if ($row == 0){

deneme ve test tablolarında
iki ayrı tabloda sorgulamayı nasıl yaptırabilirim.
ikisini tek kodda birleştirip aynı anda sorgulama yapsın istiyorum
Nasıl birleştireceğimi gösterebilirmisiniz.

Ve buna ek olarak bir tablodaki verilerin hepsini diğer tabloya nasıl gönderebilirim hangi yolu izlemem gerekiyor
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
Dönecek olan alanların sayısı ve tipi aynı ise:


Kod:
$sorgu = mysql_query(
                        "SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'" +
                        "UNION" +
                        "SELECT * FROM test where kullaniciadi = '$kullaniciadi'"
                    );
 

PHPPHP

Öğrenci
Katılım
28 Haziran 2012
Mesajlar
47
Reaksiyon puanı
0
Puanları
6
bu şekilde bir hata aldım
Parse error: syntax error, unexpected ')'

Şu şekilde açıklıyım.
2 Tablo isimleri haricinde aynı.


3. tablo farklı. kullaniciadi oradada var fakat 1 , 2 alan farklı
yukarıda vermiş oldugum gibi bir sorgu sağlıklı bir şekilde çalışıyordu sadece iki tablo veya 3 tablo yu aynı anda sorgulamak istediğimde yapmıyor bunu çözmek istiyorum
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Selamlar,

1. Soru için JOIN işlemi yapabilirsin.

Örnek;

Kod:
SELECT * FROM [COLOR=#333333]deneme[/COLOR]
INNER JOIN test
ON [COLOR=#333333]deneme[/COLOR].kullaniciadi[COLOR=#333333] [/COLOR]= test.kullaniciadi
WHERE [COLOR=#333333]deneme[/COLOR].kullaniciadi= 'isim'

Bu şekilde JOIN ile getirebilirsin.


2. Soru için bir tabloda bulunan bilgileri bir başka tabloya aktarmak istersen;

Eğer aktaracak olduğun tabloyu aktarma anında oluşturmak istiyorsan aşağıdaki sorguyu kullanacaksın.

Kod:
SELECT * INTO HedefTablo from KaynakTablo

Burada HedefTablo kopyalama anında KaynakTablo' nun field özelliklerine göre otomatik olarak oluşacaktır.

Eğer var olan bir tabloya başka bir tablonun yine tüm alanlarını yada bazı alanlarını kopyalamak istersen aşağıdaki sql kodunu kullanabilirsin.

Kod:
INSERT INTO HedefTablo (KullaniciAdi, Sifre)
SELECT KullaniciAdi, Sifre FROM KaynakTablo


Kolay gelsin.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
bu şekilde bir hata aldım

Parse error: syntax error, unexpected ')'

Şu şekilde açıklıyım.
2 Tablo isimleri haricinde aynı.


3. tablo farklı. kullaniciadi oradada var fakat 1 , 2 alan farklı
yukarıda vermiş oldugum gibi bir sorgu sağlıklı bir şekilde çalışıyordu sadece iki tablo veya 3 tablo yu aynı anda sorgulamak istediğimde yapmıyor bunu çözmek istiyorum

Koda baktım da Parse error alman normal. UNION'ın başına ve sonuna boşluk koyabilir misin?
" UNION " şeklinde.

"UNION" ile üst ve alt queryler birleşince anlamsız hale geliyor. Boşluklar eklenince anlamlı hale gelecektir.

@hokumus

Bu bir JOIN işlemi değil.

A tablosundan 100
B tablosundan 200

kullanıcı gelebilir. Tablolardaki kullanıcılar, birbirlerinden tamamen farklı olabilirler. Bu durumda JOIN query 0 (sıfır) kayıt döndüdür.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Yukarıda ki örnekte iki farklı tabloda da aynı değişkeni kullanarak aynı alanı where ile sorgulamış.
Bende Join sorabileceğini düşünerek cevap verdim. Muhtemelen işinide görecektir.
 

PHPPHP

Öğrenci
Katılım
28 Haziran 2012
Mesajlar
47
Reaksiyon puanı
0
Puanları
6
<? include "config.php"; ?>

<?
$kullaniciadi = $_POST["kullaniciadi"];
$oda = $_POST["oda"];
$sev = $_POST["sev"];
$islem = "$kullaniciadi için ekleme islemi gerçekleştirildi";




$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'");


$sorgu = mysql_query("SELECT * FROM test where kullaniciadi = '$kullaniciadi'");
$row= mysql_num_rows($sorgu);
if ($row == 0){




$ekle = mysql_query("INSERT into deneme (kullaniciadi, ekleyen, oda, sev) VALUES ('$kullaniciadi', '$yazi', '$oda', '$sev')");
$ekle = mysql_query("INSERT into test (kullaniciadi, ekleyen, oda, sev) VALUES ('$kullaniciadi', '$yazi', '$oda', '$sev')");
$bilgi = mysql_query("INSERT into bilgi (kullanici, islem, tarih) VALUES ('$yazi', '$islem', '$tarih-$saat')");


if ($ekle and $bilgi){
echo "<center> $kullaniciadi başarı ile eklendi.</center>";
}else{
echo "<center>hata. tekrar deneyin</center>";
}
}else{
echo "<center>$kullaniciadi zaten ekli.</center>";
}
?>




Detaylı olarak açıklamak gerekirsek sorun şu.
Örneğin
$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'");


$sorgu = mysql_query("SELECT * FROM test where kullaniciadi = '$kullaniciadi'");
$row= mysql_num_rows($sorgu);
if ($row == 0){


Bu işleme göre benim aldıgım sonuc şu.
test tablosunda eğer o bilgi var ise.
kod içerisinde ekle dediğim hiç bir yere eklemiyor.
oraya deneme yazarsam, deneme tablosu içinde var ise, diğer yerlere eklemiyor.
Benim yapmak istediğim şey bunu çoğaltmak.
Yani örneğin bir farklı tabloyu ele alalım.
Liste tablosunda olan bir nick eklenemesin tabloya desem.
test'i silip Liste yazmam gerekiyor ki bunu başarayım.
test'in yanına Liste 'i koyabilmeyi soruyorum. zaten ekli yanıtını verecek böylece bana.
yani tablolar farklı dahi olsa kullaniciadı hemen hemen her tabloda mevcut.
x tablosunda kullaniciadı varsa test ve deneme tablosuna eklemesin gibisinden bir soru soruyorum umarım acıklayıcı olabilmişimdir
teşekkür ederim
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
Yukarıda ki örnekte iki farklı tabloda da aynı değişkeni kullanarak aynı alanı where ile sorgulamış.
Bende Join sorabileceğini düşünerek cevap verdim. Muhtemelen işinide görecektir.

Kararsızım.
INNER JOIN olmaz. Bundan eminim.
Bu sorunu tesadüfen çözebilir ama aşağıda açıklayacağım ihtimalde problem yaratır.
UNION daha uygun görünüyor bana.
LEFT veya RIGHT JOIN (duruma göre) ise en doğru çözüm olabilir.

Neden INNER JOIN olmaz?

A tablomuz:
user1, pass | user2, pass | user3, pass

olsun.

B tablomuz:
user8, pass | user9, pass

olsun.

user1 sorgulanmak istensin.

A tablosu user1 içerirken B tablosu user1 içermediği için (INNER JOIN şartını karşılamadığı için) sonuç dönmez.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Arkadaşım,

Ben aynı koşula bağlı veriyi getireceğini düşünerek inner join dedim. Ama kriterin bir tarafı null yada <> durumunda left yada right kullanılabilir. Inner join benim soruyu anladığım ve cevap verdiğim ilk şeklidir. Duruma göre değiştirilebilir.

Bu arada senin verdiğin cevabı baltalamak için bu cevabı vermedim. Netice itibari ile bilgi paylaşımında bulunuyoruz.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
E durum değişti şimdi...

Detaylı olarak açıklamak gerekirsek sorun şu.
Örneğin
$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'");


$sorgu = mysql_query("SELECT * FROM test where kullaniciadi = '$kullaniciadi'");
$row= mysql_num_rows($sorgu);
if ($row == 0){

Burada şöyle bir hata ya da eksiklik var:

$sorgu=...

ile sorguyu çalıştırıyorsun ama hiçbir işlem yapmadan

$sorgu=...

ile sorguyu tekrar çalıştırıyorsun ve işleme ikinci sorguya göre devam ediyorsun. Sanki, ikisi arasında bir şeyler çalıştırman gerekiyor hissine kapıldım (PHP programcısı değilim).

Sanki ilk sorgudan sonra (iki $sorgu=... arasına yani):

Kod:
if ($row == 0)
{
$ekle = mysql_query("INSERT into deneme (kullaniciadi, ekleyen, oda, sev) VALUES ('$kullaniciadi', '$yazi', '$oda', '$sev')");
 $ekle = mysql_query("INSERT into test (kullaniciadi, ekleyen, oda, sev) VALUES ('$kullaniciadi', '$yazi', '$oda', '$sev')");
 $bilgi = mysql_query("INSERT into bilgi (kullanici, islem, tarih) VALUES ('$yazi', '$islem', '$tarih-$saat')");

 if ($ekle and $bilgi)
{
     echo "<center> $kullaniciadi başarı ile eklendi.</center>";
 }
else
{
     echo "<center>hata. tekrar deneyin</center>";
 }
 }

eklenmeli gibi göründü. Tabi tablo ismini filan değiştirerek.
Fikir verdi mi bilemiyorum. Vermediyse bir PHP programcısı çok rahat çözer bu problemi.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Valla bende php programcısı değilim. Sadece sql cümlesinde yardımcı olmaya çalıştım.
 

PHPPHP

Öğrenci
Katılım
28 Haziran 2012
Mesajlar
47
Reaksiyon puanı
0
Puanları
6
genel olarak yapmak istediğim şey o işte problem yaaşdıgım kısım

$sorgu = mysql_query("SELECT * FROM test where kullaniciadi = '$kullaniciadi'");
$row= mysql_num_rows($sorgu);
if ($row == 0){
Şu bölümde sorgulanan test 'in coğaltılması test ve denemeyi beraeber sorgulamak gibi.
elseden dönen sonuclarda buna göre olmalı ki hiç problemim kalmasın

 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
yanlız şu kontrol deyimlerinde değişkenleri direk kullanmaktan vazgeç, o zaman içeriklerine erişmeye çalışıyosun ve geçerliliğini denetlerken, php hatayı ekrana basar, eğer ulaşmaya çalıştığın değişken yoksa.

onun dışında bence herkez gereği kadar açıklamış, takıldığın başka kısımlar olursa, söz dizim, eş değer ifadeler ve daha okunabilir ve optimize kod yazımı hakkında, sevee seve yardımcı olurum. :D
 

PHPPHP

Öğrenci
Katılım
28 Haziran 2012
Mesajlar
47
Reaksiyon puanı
0
Puanları
6
Yapamadım ki.
$sorgu = mysql_query("SELECT * FROM deneme INNER JOIN test ON deneme.kullaniciadi= test.kullaniciadi where deneme.kullaniciadi = '$kullaniciadi'");

olarak denedim.

$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'" + " UNION " + "SELECT * FROM test where kullaniciadi = '$kullaniciadi'");

olarak denedim.
Sonuc olarak yapmak istediğim iki sorgu aynı anda calışmıyor. arkadaşlara sonsuz teşekkür ederim vakit ayırdılar bilmediğim bir çok şeyi öğretmiş oldular fakat ben istediğime ulaşamadım.
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
Yapamadım ki.
$sorgu = mysql_query("SELECT * FROM deneme INNER JOIN test ON deneme.kullaniciadi= test.kullaniciadi where deneme.kullaniciadi = '$kullaniciadi'");

olarak denedim.

$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi'" + " UNION " + "SELECT * FROM test where kullaniciadi = '$kullaniciadi'");

olarak denedim.
Sonuc olarak yapmak istediğim iki sorgu aynı anda calışmıyor. arkadaşlara sonsuz teşekkür ederim vakit ayırdılar bilmediğim bir çok şeyi öğretmiş oldular fakat ben istediğime ulaşamadım.

ya mysql sorgularına daha gelmedim, bende kendimi geliştiriyorum php konusunda üstadlar kadar değilim ama...

$sorgu = mysql_query("SELECT * FROM deneme where kullaniciadi = '$kullaniciadi' UNION SELECT * FROM test where kullaniciadi = '$kullaniciadi'");

bunu bi dene bakalım...
 
Üst