DB-Abfrage mit mehr als einem Ergebnis mit VerbundDB |
|
DB-Abfrage mit mehr als einem Ergebnis mit VerbundDB |
Beitrag Nr.: 1 |
Hey, ich hab da mal ncohmal ne kleine Problematik, die es zu lösen gilt.... - vllt habt ihr ja ne Idee?!? :)
Es geht um ein Script, das auf 2 DB-Tables zugreifen soll. In einer Tabelle steht der Deutsche Name, der gesucht wird, hier hole ich mir dann den Namen (den Suchbegriff + Platzhalter) und die ID raus.
Nur greif ich die ID auf, und suche damit in meiner 2. Tabelle nach der Disply-ID, welche ich dann auch auslese.
Mein Code sieht so aus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
$item_tbl_search = "SELECT * FROM item_template_locale WHERE Name LIKE '"."%".$itembezeich."%"."' ";
$item_tbl_search_out = mysql_query($item_tbl_search);
while ($ds = mysql_fetch_object($item_tbl_search_out)) {
$id = $ds->ID;
$itemname = $ds->Name;
eval ("\$itemsearchout .= "".$tpl->get("itemsearch_out")."";");
}
//ItemID-Suche in ID-Tabelle
$item_tbl_id_search = "SELECT * FROM item_template WHERE entry LIKE '".$id."' ";
$item_tbl_id_search_out = mysql_query($item_tbl_id_search);
while ($ds = mysql_fetch_object($item_tbl_id_search_out)) {
$disply_id = $ds->displayid;
eval ("\$itemsearchout .= "".$tpl->get("itemsearch_out")."";");
} |
|
Hier holt er mir nun alle zu dem Suchbegriff passenden Namen aus der ersten Tabelle und listet diese auf - was ja auch so gewollt ist, leider übergibt er aber nur die letzte ID, die er findet und darum zeigt er mir später in miner Tabelle in der 'Namen'-Spalte zwar alle Sachen an, in der 'ID'-Spalte wird aber nur die letzte Zeile gefüllt. Das ist natürlich blöd.
Wie krieg ich die IDs aus der ersten Tabelle also in ein Array verpackt, und dieses dann aus der 2. Tabelle komplett ausgelesen, sodass ich für jeden Eintrag "$itemname" in meiner Ausgabetabelle auch die dazu passende dispalyID aus der 2. Tabelle bekomme (oder geht das überhaupt mim Array?!?)
__________________
|
|
13.06.2019 20:39 |
|
|
|
Hey,
so ich bin mal dazu gekommen das auszuprobieren, klappt aber leider nicht...
zum nachvollziehen hier mal das komplette script:
die PHP:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
|
<?php
$filename="item_search.php";
require("global.php");
require("acp/lib/class_parse.php");
//IF Suche
if(isset($_POST['action']) == "itemsearch"){
$itembezeich = $_POST[Itemname];
$itemsuche=1;
//Itemsuche in Tabelle
$item_tbl_search = "SELECT * FROM item_template_locale WHERE Name LIKE '"."%".$itembezeich."%"."' ";
$item_tbl_search_out = mysql_query($item_tbl_search);
while ($ds = mysql_fetch_object($item_tbl_search_out)) {
$id = $ds->ID;
$itemnameDE = $ds->Name;
// eval ("\$itemsearchout .= "".$tpl->get("itemsearch_out")."";");
}
//ItemID-Suche in ID-Tabelle
$item_tbl_id_search = "SELECT * FROM item_template WHERE entry LIKE '".$id."' ";
$item_tbl_id_search_out = mysql_query($item_tbl_id_search);
while ($ds = mysql_fetch_object($item_tbl_id_search_out)) {
$disply_id.=$ds->displayid;
$itemname = $itemnameDE;
eval ("\$itemsearchout .= "".$tpl->get("itemsearch_out")."";");
}
}else{
$itemsuche=0;
$itembezeich = "suchst du nix";
}
if($fehler !="") {
echo "<SCRIPT>
alert('$fehler');
</SCRIPT>";
}
eval("\$tpl->output("".$tpl->get("itemsearch")."");");
?> |
|
die 1. tpl >> itemserach<<:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
|
<?xml version="1.0" encoding="{$lang->items['LANG_GLOBAL_ENCODING']}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="{$lang->items['LANG_GLOBAL_DIRECTION']}" lang="{$lang->items['LANG_GLOBAL_LANGCODE']}" xml:lang="{$lang->items['LANG_GLOBAL_LANGCODE']}">
<head>
<title>$master_board_name | {$lang->items['LANG_FAQ_FAQ']}</title>
$headinclude
</head>
<body>
$header
<table cellpadding="{$style['tableincellpadding']}" cellspacing="{$style['tableincellspacing']}" border="{$style['tableinborder']}" style="width:{$style['tableinwidth']}" class="tableinborder">
<tr>
<td class="tablea"><table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr class="tablea_fc">
<td align="left"><span class="smallfont"><b><a href="index.php{$SID_ARG_1ST}">$master_board_name</a> »
Corelith Item-Suche </b></span></td>
<td align="right"><span class="smallfont"><b>$usercbar</b></span></td>
</tr>
</table></td>
</tr>
</table><br />
<table cellpadding="{$style['tableincellpadding']}" cellspacing="{$style['tableincellspacing']}" border="{$style['tableinborder']}" style="width:{$style['tableinwidth']}" class="tableinborder">
<td align="center" class="tablecat" colspan="1"><span class="normalfont"><font color="00b3fe" size=4><u>Corelith Item-ID-Suche</u><font></span></td>
<tr align="left">
<td class="tableb" style="width:100%"><span class="normalfont">
<center>
<br>
<br>
Hier könnt ihr den Namen eines Items des Corelith-Servers angeben, um die ID des betreffenden Items herauszufinden.<br>
<br>
<form accept-charset="UTF-8" method="POST" action="item_search.php">
<input type="hidden" name="action" value="itemsearch">
<table border=1 bordercolordark=#00b3fe bordercolorlight=#ffffff width="40%">
<tr>
<th width="15%"><font size="2">Item-Name:</font></th>
<td width="25%" align="center"><input type="text" placeholder="Item" name="Itemname" size="25"></td>
</tr>
</table>
<br>
<input type="submit" value="Suchen" name="itemsearch">
<br><br>
</form>
$itemsuche<br>
test<br>
$itembezeich<br><br>
<if($itemsuche=="1")><then>
<center>Deine Suche ergabe folgende Funde:</center><br /><br />
<table border=1 bordercolordark=#00b3fe bordercolorlight=#ffffff width="40%">
<tr>
<colgroup width="300" height="60" span="">
<!-- <th><b><font size="3">Listennummer</font></b></th> -->
<th><b><font size="3">Item</font></b></th>
<th><b><font size="3">ID</font></b></th>
</colgroup>
</tr>
$itemsearchout
</table>
<br />
</then></if><br /><br />
</center>
</span></td>
</tr>
</table>
$footer
</body>
</html> |
|
und die 2. TPL >>itemserach_out<<:
code: |
1:
2:
3:
4:
5:
|
<tr>
<!-- <td width="18%" align="center">$id</td> -->
<td width="18%" align="center">$itemname</td>
<td width="17%" align="center">$disply_id</td>
</tr> |
|
__________________
|
|
19.06.2019 01:41 |
|
|
haumi
Boardbetreiber
[meine Galerie]
Dabei seit: 06.06.2009
Beiträge: 3.441
Herkunft: NRW
Postid: 17045
|
|
Versuche mal
code: |
1:
2:
3:
4:
5:
6:
|
$item_tbl_search = "SELECT * FROM item_template_locale WHERE Name LIKE '"."%".$itembezeich."%"."' ";
$item_tbl_search_out = mysql_query($item_tbl_search);
while ($ds = mysql_fetch_object($item_tbl_search_out)) {
$id = $ds->ID;
$itemname = $ds->Name; |
|
durch
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
$stmt = $dbi->prepare("SELECT ID, Name FROM item_template_locale WHERE Name LIKE '"."%".$itembezeich."%"."'");
$stmt->execute();
$stmt->bind_result($ID, $Name );
while($stmt->fetch()) {
$id = $ID;
$itemname = $Name; |
|
zu ersetzen.
wird dann denn immer noch nur das letze Ergebnis angezeigt,
dann ersetze mal
code: |
1:
2:
|
$id = $ID;
$itemname = $Name; |
|
durch
code: |
1:
2:
|
$id .= $ID
$itemname .= $Name; |
|
ersetze in der global.php
die Zeile:
code: |
1:
|
$db = new db($sqlhost, $sqluser, $sqlpassword, $sqldb, $phpversion); |
|
durch:
code: |
1:
2:
|
$dbi=mysqli_connect("$sqlhost",$sqluser,$sqlpassword,$sqldb); // prozedualer Zugriff
$db = new db($sqlhost, $sqluser, $sqlpassword, $sqldb, $phpversion); // objektorientierter Zugriff |
|
LG
haumi
__________________
Gelassen das hinnehmen, was nicht zu ändern ist,
engagiert angehen was man gestalten kann.
|
|
24.06.2019 16:12 |
|
|
|
Hey,
erstmal Danke für die Mühe! Allerdings:
mit dem "Punkt" :
code: |
1:
2:
|
$id .= $ID;
$itemname .= $Name; |
|
zeigt er mir garnix mehr an nach der Suche als Ergebnis.
Ohne die Änderung mit dem "Punkt" zeigt er keine Itemnamen mehr an und NURNOCH die letzte ID, die er findet...
Klappt also leider noch nicht so ganz nun^^
__________________
|
|
26.06.2019 09:11 |
|
|
|
Hmmmmm..
Du holst die Daten da alle aus 1 DB, das geht ja ohne Weiteres... Mein Problem is die Verbindug:
Alles was nach dem Suchbegriff klingt aus der einen DB, davon je die ID, und dann jede ID aus der zweiten DB die passenden Daten. Als Ausgabe jeder Name, der dem Suchbegriff ähnelt aus DB1 mit den dazu passenden Daten aus DB2...
Und da wird eben nicht jede ID (die eben das Verbindungsglied in beiden DBs ist) genommen, sondern nur die letzte und damit dann aus DB2 die Daten (displayID) rausgenommen und ausgegeben....
__________________
|
|
29.06.2019 21:23 |
|
|
|
Hey, ja, das mit dem JOIN sieht ganz interessant aus...
Ich werd das bei nächster Gelegenheit mal versuchen und Rückmeldung geben....
__________________
|
|
30.06.2019 23:31 |
|
|
|
So... das Join funktioniert !!!
Habs nun wie folgt gelöst:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
$item_tbl_search = "SELECT item_template_locale.name AS name, item_template.displayid AS displayid
FROM item_template_locale
JOIN item_template
ON item_template_locale.ID = item_template.entry
WHERE item_template_locale.name LIKE '"."%".$itembezeich."%"."' ";
$item_tbl_search_out = mysql_query($item_tbl_search);
while ($ds = mysql_fetch_object($item_tbl_search_out)) {
$disply_id = $ds->displayid;
$itemname = $ds->name;
eval ("\$itemsearchout .= "".$tpl->get("itemsearch_out")."";");
} |
|
^^besten Dank für die ganze Unterstützung Haumi
__________________
|
|
02.07.2019 20:22 |
|
|
|