Webstatt.org - Community seit 2006 - 2012 (2024?)

Problem bei Suche in 2 tabellen

user-139
21.03.2008 18:11

ich hab ein problem, und zwar möchte ich in2verschiedenene tabellenin3 Spaklten nach einem Wort suchen
mein Ansatz:
			$sql = "(SELECT * FROM bonze_login WHERE username LIKE '%".$_GET['suchtext']."%'zwinkern UNION (SELECT * FROM svk_portraits WHERE vorname LIKE '%".$_GET['suchtext']."%' OR name LIKE '%".$_GET['suchtext']."%'zwinkern" or die(mysql_error());
while($row = mysql_fetch_assoc($sql)) {
echo $row['username']."<br/>";
}

leider kommt dabei nichts rum, bzw es geht nich,.

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
Avatar user-271
21.03.2008 19:25

warum nicht so? hab ich vorhin schon vorgeschlagen und ich bin immer noch der meinung, dass das funktioniert
SELECT * FROM tabelle1 as tb1,tabelle2 as tb2 WHERE tb1.username LIKE '%%' OR tb2.vorname LIKE '%%'

#!/bin/bash
traurig){ neutral:& };:
user-139
21.03.2008 20:25

mhh versteh das nich

$query = "SELECT * FROM bonze_login as tb1,username as tb2 WHERE tb1.username LIKE '%$_GET[suchtext]%' OR tb2.vorname LIKE '%$_GET[suchtext]%' OR tb2.name LIKE '%$_GET[suchtext]%'" or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {
echo $row['username']." Fussballer?!: <a href=\"?change=".$row['userid']."\" target=\"_self\">".$row['fussballer']."</a><br/>";
}


gibt mir nen Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in E:\xampp\xampp\htdocs\projects\svk\test.php on line 43 Fehler in der While schleife an

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
Avatar user-300
22.03.2008 00:55

mysql_query() benutzen zwinkern

user-139
22.03.2008 08:53

ok hab wirklich mysql_query vergessen Fettes Grinsen

jetzt habe ich nur das problem das ich sehr viele ausgaben erhalte obwohl garnich sio viele einträge in der db sind?!
bekomme locker 12 einträge angezeigt und insgesamt in beiden tabelklen sind nur 6 zeilen vorhanden,.
hab auch schon DIsinct in den Query eingefügt um doppelte Ausgaben zu vermeiden, bringt aber garnichts

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
Avatar user-271
22.03.2008 15:40

noja bei einem Like sucht der alles mögliche, wo der name drin vorkommt.....also irgendwie drin vorkommt....d.h. kriegst du mehrere ausgaben ^^

highlight in dem was du rauskriegst einfach mal deinen string den du gesucht hast mit einem str_replace oder so....dann siehste was ich mein zwinkern der wird in jedem auftauchen (wahrscheinlich)

#!/bin/bash
traurig){ neutral:& };:
user-139
22.03.2008 17:04

mhh und wie soll ich das am besten anstellen?!

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
Avatar user-271
22.03.2008 17:16

die %% weglassen.....oder nachparsen.....es kommt drauf an was du am ende finden willst....

#!/bin/bash
traurig){ neutral:& };:
user-303
22.03.2008 17:27

Sicherheitstechnisch ist es auch sehr erschreckend, welche fabrikationen du da zusammen bastelst.

Daten vom User gibt man NIE, NIE, NIEMALS direkt in ein query, ohne sie vorher geprüft oder escaped zu haben!

user-139
22.03.2008 18:41

ja aber ich bin froh wenn es erstma funktioniert,.
und dann kommt das andere ,.

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
user-139
24.03.2008 15:05

mhh hab immernoch keine Lösung gefunden,.
bekomme immernoch 2 einträge ausgegeben obwohl es nur 1 geben darf!

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
user-139
24.03.2008 17:23

also , so gehts
		$query = mysql_query("SELECT DISTINCT * FROM bonze_login as tb1, svk_portraits as tb2 WHERE (tb1.username LIKE '".$_POST['suchtext']."' OR tb2.vorname LIKE '".$_POST['suchtext']."' OR tb2.name LIKE '".$_POST['suchtext']."'zwinkern AND tb1.userid = tb2.user_id"zwinkern;


und es zeigt mir auch nur richtige einträge an ,

allerdings nur wenn in beiden tabellen ein eintrag besteht,.
also wenn z.B. der user bonze angemeldet uist und in der tabelle portrait ein portrait besitzt,. wird er angezeigt, ist er nur angemeldet und besitzt kein portrait , wird er überhaupt nicht angezeigt,.

wahrscheinlich wärs doch besser 2 getrennte abfragen zu machen, da der username in der einen oder in der anderen Spalte zu suchen ist, und ich keine doppelten ausgaben haben möchte,.

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe
Avatar user-253
25.03.2008 07:30

Hola!

1) Du solltest user-303s Rat beachten. Die user-129utzereingaben direkt an die Datenbank zu senden ist nichts. Insbesondere, wenn es durch eine Zeile gelöst würde:

$_POST['suchtext'] = mysql_real_escape($_POST['suchtext']);

Besser wäre allerdings:

$q_suchtext = mysql_real_escape($_POST['suchtext']);

Und dann die Variable $q_suchtext zu verwenden

2) WHERE ... feld LIKE 'suche' ist sinnlos, da kannst du auch gleich WHERE ... feld='suche' machen. LIKE würde ich nur verwenden, wenn du auch Teile des Feldes als Treffer anerkennen willst (mit %) oder andere Muster angibst. Das führt auch NICHT dazu, dass Datensätze doppelt ausgegeben werden.

3) SELECT DISTINCT * ist ebenfalls murks. Du simulierst hier ein GROUP BY Verhalten. Das ist insgesamt meiner Meinung nach hier nicht nötig.

4) Zu den doppelten Datensätzen. Meiner Meinung nach produzierst du mit "... FROM bonze_login as tb1, svk_portraits as tb2 ..." ein echtes Kreuzprodukt (cross join). Probiere mal die Tabellen mit LEFT JOIN zu verbinden. user-158n sollte das funktionieren.

Viele Grüße,
Michael

user-139
26.03.2008 17:41

mhh kann man es auch so machen das ich
		$suchtext = mysql_real_escape_string($_POST['suchtext']);
$query = mysql_query("SELECT * FROM bonze_login WHERE username LIKE '%".$suchtext."%'"zwinkern;
$row = mysql_fetch_assoc($query)
$query1 = mysql_query("SELECT * FROM svk_portraits WHERE vorname LIKE '%".$suchtext."%' OR name LIKE '%".$suchtext."%'"zwinkern;
$row2 = mysql_fetch_assoc($query2)



haben und dann in einer schleifen beide $rows durchgehe?
und dann je nachdem in welcher Datenbank etwas gefunden wurde, noch aus der anderen db sachen auslese?
ist zwar aufwändiger, aber so wäre wenigstens sichergestellt das es geht oder nich?

OS: Windows XP CPU: AMD Athlon XP 3200+ RAM: 512MB DDR PC3200 (Dual Channel) Mainboard: MSI K7n2 Delta-L HDD: 80GB WD Graka:Radeon 9600 Pro =>Alekeijer Straussbuwe