3 Tabellen durchsuchen mit 1 Suchbefehl |
|
3 Tabellen durchsuchen mit 1 Suchbefehl |
Beitrag Nr.: 1 ![Zum Anfang der Seite springen Zum Anfang der Seite springen](images/goup.gif) |
Hey, ich brauch nochmal hilfe, ich komm nich klar mit dem ganze join und union und union all und und und was google ausspuckt :-\
es geht drum, dass ich 3 Tabellen habt, aus den ich mit ner Scuhe was rausfiltern will.
Derzeit hab ichs so gelöst:
code: |
1:
2:
3:
4:
|
$suchebezeich = $_POST[Suche];
$search = "SELECT * FROM (`bb1_bugtracker_open`,`bb1_bugtracker_closed`,`bb1_bugtracker_workon`) WHERE bb1_bugtracker_open.titel LIKE '"."%".$suchebezeich."%"."' OR `bb1_bugtracker_closed`.titel LIKE '"."%".$suchebezeich."%"."' OR `bb1_bugtracker_workon`.titel LIKE '"."%".$suchebezeich."%"."' "; |
|
aber da findet er nix...
ich will erstmal nur die Spalte 'titel' in allen Tabellen absuchen...
Jemand ne idee, wo mein Fehler ist? Mit UNION, UNION ALL oder JOIN - was google so sagt - weiß ich nicht wirklich, was es dann macht, daher will ichs ungerne auf 'blauen Dunst' benutzen...
__________________
|
|
22.06.2018 16:49 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
haumi
Boardbetreiber
[meine Galerie]
Dabei seit: 06.06.2009
Beiträge: 3.442
Herkunft: NRW
Postid: 16914
![](images/spacer.gif) |
|
|
22.06.2018 21:01 |
![Beiträge von haumi suchen Beiträge von haumi suchen](images/search.gif)
|
|
|
RE: 3 Tabellen durchsuchen mit 1 Suchbefehl |
Beitrag Nr.: 3 ![Zum Anfang der Seite springen Zum Anfang der Seite springen](images/goup.gif) |
Hmm klappt so auch nciht... die Suche greift drauf zu, wenn ich nur 1 Tabelle abfrage... sobald es mehr werden, ob mit JOIN oder ohne... findet er nixmehr...
__________________
|
|
22.06.2018 22:03 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Zitat: |
Original von haumi
Kann es sein das denn auch nichts mehr da ist zum finden?
Ich habe es mal mit drei anderen Tabellen, die in jedem wbb2 vorhanden sind probiert und da klappt es!
code: |
1:
2:
3:
4:
|
SELECT bb1_users.username, bb1_user2groups.userid, bb1_userfields.field1
FROM ((bb1_users
INNER JOIN bb1_userfields ON bb1_users.userid = bb1_userfields.userid)
INNER JOIN bb1_user2groups ON bb1_users.userid = bb1_user2groups.userid) |
|
|
|
Also ich muss sagen, ich kann grad nich nachvollziehen, wie die Verbindung bei dir in dem Beispiel ist...
Du verknüpfst da aber auch unterschiedliche Spalten, wenn ich das richtig sehe, oder? - in meinem Tabellen heißt ja je Tabelle die spalte in der ich suchen will 'titel' ....
Vllt liegt das bei mir aber auch an der Suchvariablen?
Sieht jedenfalls nun so bei mir aus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
//Suchfunktion
if(isset($_POST['action']) == "search" && ($_POST['action']) != "neu" && ($_POST['action']) != "workon"){
$suchebezeich = $_POST[Suche];
$bugsearch = "SELECT bb1_bugtracker_open.titel, bb1_bugtracker_close.titel, bb1_bugtracker_workon.titel
FROM ((bb1_bugtracker_open
INNER JOIN bb1_bugtracker_closed ON bb1_bugtracker_open.titel = bb1_bugtracker_close.titel)
INNER JOIN bb1_bugtracker_workon ON bb1_bugtracker_closed.titel = bb1_bugtracker_workon.titel)
WHERE titel LIKE '"."%".$suchebezeich."%"."' "; |
|
Dei Sachen sind definitiv noch da, da ich die Tabelle '...open' nochmal für bestimmte User unter der Suche direkt anzeige - und da seh ich, dass zum Beispiel der Eintrag 'Test' unter titel existiert...
Such ich aber nach eben jenem 'Test', sagt er 0 Ergebnisse...
__________________
|
|
25.06.2018 16:41 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Hey Haumi...
Also 'Jein' *gg...
erstmal zum Post voher:
Mache ich das so:
code: |
1:
2:
|
... WHERE bb1_bugtracker_open.titel LIKE '"."%".$suchebezeich."%"."' OR bb1_bugtracker_closed.titel LIKE '"."%".$suchebezeich."%"."' OR bb1_bugtracker_workon.titel LIKE '"."%".$suchebezeich."%"."' "; |
|
zeigt er mir beim Suche anklicken dann die Meldung
>> Column 'titel' in where clause is ambiguous <<
Das geht also irgendwie dann nicht, KP warum.... heißt wohl 'Spalte Titel ist mehrfahc definiert' oder so...
Was die Ausgabe angeht verhält es sich wie folgt:
die "open" ist für Einträge, die offen sind (also noch bearbeitet werden müssen), werden sie auf In Bearbeitung gesetzt, verschiebe ich sie in die Tabelle "workon". Sind die EInträge abgearbeitet wandern sie von "workon" nach "closed" .... mit der Suche möchte ich alle Tabellen abfragen, da ich wissen will, ob ein Eintrag, welcher gesucht wird, schon eingetragen wurde... da ich die Einträge durch die Tabellen 'schiebe' verschwinden sie ja aus der ersten, wenn sie in die nächste kommen...
Wobei mir grad beim erklähren nun ein ganz anderer Weg einfällt:
Wenn ich eine Tabelle mit 2 Spalten mehr mache, in der ich nur makiere, ob die einträge bearbeitet bzw abgarbeitet sind, hat sich die 'mehrer-Tabellen-Geschichte' eigendlich erledigt... dann muss ich die Tabellen nur dementsprechend anders auslesen, aber das geht ja mit sowas wie:
code: |
1:
|
WHERE workon != "" |
|
Hier trag ich den Bearbeiter ein mit userid und naja mit abgearbeitet dann genauso...
Ja das is machbar denk ich... ncihtsdesto trotz wüsste ich gerne, wie das mit den mehrfachtabellen klappt, bzw wo mein Fehler is halt^^....
Übrigens das mit dem Bearbeiter eintragen:
In der Tabelle für 'offen' hab ich am ende der Anzege ne Spalte mit einem Button 'Bearbeiten' JE ZEILE.
Wenn nun wer den Button anklickt, wie krieg ich raus, in welcher Zeile dieser Button angeklickt wurde, damit ich die Zeile dan 'in Bearbeitung ' setzen kann und die ID desjenigen, der den Button angeklickt hat, in eben JENE ZEILE eintrage?!?
edit://
So die suche hab ich nun wie oben beschrieben umgescriptet - funzt nu auch... alerdings hab ich jetzt ein neues Problem... und zwar das mit dem Button...
ICh lese also meine Tabelle nun auch und sage, wenn was is der Spalte 'work_on' steht, übernimm das... macht er auch... nur will ich, wenn nichts darin steht, dass er mir einen Button 'Bearbeiten' in der Tabelle anzeigt, das geht allerdings nicht...
Tabelle im TPL hat diese Zelle:
code: |
1:
|
<td width="17%" align="center">$in_work</td> |
|
Im Script versuch ichs so zu machen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
$auszg = "SELECT * FROM `bb1_bugtracker` ORDER BY time DESC";
$ausz = mysql_query($auszg);
while ($ds = mysql_fetch_object($ausz)) {
$id = $ds->id;
$user = $ds->melder;
$titel = $ds->titel;
$text = $ds->bugtext;
$zeit = $ds->time;
$timestamp = date("H:i:s - d.m.Y",$zeit);
$work = $ds->in_work;
If($work != ""){
$in_work = $work;
}else{
$in_work = "button" ;
}
eval ("\$bugtrackeropen .= "".$tpl->get("bugtracker_open")."";");
} |
|
das amcht er mir auch so wie ers soll, allerdings krieg ich mit echo da leider den Button nicht rein, wenn ich bei "else"
code: |
1:
|
$in_work = echo "<input type="bugtracker.php" name="hidden" value="workon"><input type="hidden" name="Bearbeiten" value="workon">"; |
|
schreibe...
Und dann is noch die Sache mit was passiert, wenn der BUtton angeklickt wird.. aber dazu später vllt noch
__________________
|
|
27.06.2018 15:30 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Ja, nein... Eintragen is klar... Das läuft auch soweit...
Ich hab nun die Tabelle mit der Spalte 'Bearbeitung' ...
Hier soll nun entweder ein Button rein, der mit 'Bearbeiten' beschriftet ist (sofern das Feld in der DB leer ist).
Nun hab ich mehrere Zeilen in der Tabelle, wo in jeder Zeile ein anderes Problem steht.
Wenn nun ein Modetator daher kommt und eines der Probleme bearbeiten will, soll er den betreffenden Button in der Betreffenden Zeile anklicken können, und durch diesen Klick schreibt sich sein $wbbuser [nickname] in die DB...
Beim reload der Seite wird nun in der betreffenden Zeile halt nichtmehr der Button "Bearbeiten" angezeigt, sondern der Name...
(Das Namen aus der DB auslesen klappt auch, habe halt mal testweise von Hand jemand reingeschrieben... Nur der Button will nicht da rein...)
Die Unterscheidung (s.o.) funzt auch, er schreibt mir im Moment halt entwedet den Namen aus der DB, oder halt das Wort "button" anstatt eines echten Buttons in meine Ausgabetabelle....
Ganz genial wäre dazu beim Anklicken des Buttons noch ne 'make new thred' funktion, die mir dann ein Threat von dem User, mit Titel aus der Tabelle bucktracker und auch Text aus der Tabelle erstellt... Und das natürlich in einem vorgegebenen Forum halt...
***********************************
Was die Suchgeschichte angeht, die Spalte Titel wäre ggf in allen Tabellen beschrieben gewesen... Jenachdem, welchen Status der Bug gehabt hätte, da ich ja von mehreren Zeilen (viele Unterschiedliche Bugs) ausgehen kann... Aber das hat sich ja erledigt durch die Umstruckturierung auf nur 1 Tabelle... (Soll hier nurnoch mal zur Erläuterung erwähnt sein ;) )
__________________
|
|
29.06.2018 01:05 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
RE: 3 Tabellen durchsuchen mit 1 Suchbefehl |
Beitrag Nr.: 11 ![Zum Anfang der Seite springen Zum Anfang der Seite springen](images/goup.gif) |
Sooo...
Update und "Wiederbelebung" ;) :
hab nun den Button drin:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
...
//Tabellenlistung Bugs
//Offen
$auszg = "SELECT * FROM `bb1_bugtracker` ORDER BY time DESC";
$ausz = mysql_query($auszg);
while ($ds = mysql_fetch_object($ausz)) {
$id = $ds->id;
$user = $ds->melder;
$titel = $ds->titel;
$text = $ds->bugtext;
$zeit = $ds->time;
$timestamp = date("H:i:s - d.m.Y",$zeit);
$work = $ds->in_work;
If($work != ""){
$in_work = $work;
}else{
$in_work = "<button id='_bwork_on' type='button' value='$ds->id'>Bearbeiten</button>";
}
eval ("\$bugtrackeropen .= "".$tpl->get("bugtracker_open")."";");
}
... |
|
Nun gehts weiter...
Wer den Button klickt soll via >> $wbbuser [nickname] << nun den Nickname in die DB eintragen, eben dann aber auch in betreffende Zeile der DB, wo in der Tabelle der Button angeklickt wird...
Sprich ich muss nun die ID des buttons auslesen, wenn dieser angeklickt wird und dann den Eintrag machen...
Eintragen will ichs etwa so:
code: |
1:
2:
3:
4:
5:
6:
|
if(isset($_POST['action']) == "workon" && ($_POST['action']) != "neu" && ($_POST['action']) != "search"){
$worker = "INSERT INTO `bb1_bugtracker` SET in_work= '$wbbuser [nickname]' WHERE id = '$id' ";
$worker_in= mysql_query($worker);
}
|
|
oder wahrscheinlich eher so ähnlich ;)
__________________
|
|
04.07.2019 20:37 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Jein,
ich will etwas in EINE BESTIMMTE ZEILE der Tabelle schreiben, darum das where... Sons ist ja nicht bekannt welcheZeile und er schreibt es in dieerste freie, oder täusch ich mich nun?
Geht ja drum, dass die userID in die Zeile geschrieben wird, in der der betreffend angeklickte Button ist (da ich mehrere Zeilen mit dem Button habe) ...
__________________
|
|
10.09.2019 15:18 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
soweit sogut.... die Buttons sind nun da, wenn sie sollen...
allerdings passiert nix beim draufklicken:
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:
|
...
//Tabellenlistung Bugs
//Offen
$auszg = "SELECT * FROM `bb1_bugtracker` ORDER BY time DESC";
$ausz = mysql_query($auszg);
while ($ds = mysql_fetch_object($ausz)) {
$id = $ds->id;
$user = $ds->melder;
$titel = $ds->titel;
$text = $ds->bugtext;
$zeit = $ds->time;
$timestamp = date("H:i:s - d.m.Y",$zeit);
$work = $ds->in_work;
If($work != ""){
$in_work = $work;
}else{
$in_work = "<button id='bwork_on' type='button' value='$ds->id'>Bearbeiten</button>";
}
If($fixed == "" && $work != ""){
$fixed = "<button id='bwork_on_fixed' type='button' value='$ds->id'>fixxed!</button>";
}else{
$fixed = $ds->fixed;
}
eval ("\$bugtrackeropen .= "".$tpl->get("bugtracker_open")."";");
}
//Bearbeitung durch
if(isset($_POST['action']) == "bwork_on" && ($_POST['action']) != "neu" && ($_POST['action']) != "search"){
$worker = "UPDATE `bb1_bugtracker` SET in_work= 'In Bearbeitung durch $wbbuser [nickname]' WHERE id = '$id' ";
$worker_in= mysql_query($worker);
}
//fix durch
if(isset($_POST['action']) == "bwork_on_fixed" && ($_POST['action']) != "neu" && ($_POST['action']) != "search"){
$fixxer = "UPDATE `bb1_bugtracker` SET fixed= '$wbbuser [nickname]' WHERE id = '$id' ";
$fixxer_in= mysql_query($fixxer);
}
//on Work
$anzg = "SELECT * FROM `bb1_bugtracker` ORDER BY time ASC";
$anz = mysql_query($anzg);
while ($ds = mysql_fetch_object($anz)) {
$id = $ds->id;
$user = $ds->melder;
$titel = $ds->titel;
$text = $ds->bugtext;
$zeit = $ds->time;
$timestamp = date("H:i:s - d.m.Y",$zeit);
$workon = $ds->in_work;
$fixed = $ds->fixed;
eval ("\$bugtrackerworkon .= "".$tpl->get("bugtracker_workon")."";");
}
... |
|
Ich muss gestehen, dass ich mich mit php-Buttons aber auch nicht soooo sehr auskenne - normal mach ich Buttons ja via <form> in html :-\ ...
__________________
![](http://gfx.weltenband.de/SignaHangasilly.gif)
|
|
13.09.2019 23:15 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Ja klar, mit hatm und <form> is das ja auch kein problem...
Ich hab nun leider aber die buttons im phpscript aufem server liegen, da ich sie nur unter ner bedingung zeigen will
(If $work == "")...
Sprich wenn in der DB-Spalte Work ein Username steht, wirddieser angezeigt. Wenn NICHTS darin steht wird der button angezeigt, der den usernsmen des users, der ihn anklickt, einträgt!
Bei der nächsten Ausgabetabellenspalte is das Spiel ähnlich:
Steht in den DB-Spalten "work" und "fix" nix, kommt hier nix hin,
steht in der DB-Spalte "work" nen user, kommt hier ein button hin,
klickt man den Button an und IST NICHT der User aus der "work"-spalte, gibts nen Fehler,
klickt man den button an und IST der user aus der "work" -spalte, wird in die DB-spalte fix nen timestamp eingetragen,
ist in der DB-Spalte "fix" inhalt, wird dieser in der Ausgabetabellenspalte Fixxed angezeigt...
So zumin grob das gedankliche Konzept...
Ansonsten muss ich die Variablen aus der Php ins TPL übergeben und dann dann in html die <form> -tags machen... Das wäre dann vllt auch noch ne möglichkeit, komm ich aber nn grade erst drauf....
__________________
|
|
17.09.2019 16:55 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Zitat: |
Original von haumi
Das wäre eine Möglichkeit.
Eine zweite Möglichkeit wäre es mehrere Templates zu erstellen, die je nach Vorgabe aufgerufen werden.
Ich muss mir das Konzept mal in Ruhe ansehen, aber spontan würde ich vorschlagen mehrere Templates zu erstellen.
LG
haumi |
|
Sind es... Die Tabellen - jenachdem welche ich brauche - haben einzelTPLs...
Ich werd das mal beiGelegenheit austesten und dann Rückmeldung geben, ob und wie es geklappt hat...
__________________
|
|
19.09.2019 22:24 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|
Sooo... Update:
Ich hab nun die Buttons via <form>-Tag und via TPL reingebastelt und die Funktion des Eintragens passt auch... zumin zum Teil -- folgendes Problem nun:
code: |
1:
|
$worker = "UPDATE `bb1_bugtracker` SET in_work= '$wbbuserdata[username]' WHERE id = '$id' "; |
|
trägt zwar User ein, allerdings NICHT in die Zeile, in die es soll!!
Ich kann hier JEDEN Button in der Tabelle anklicken, ich weiß nicht warum, aber er trägt das in der DB grundsätzlich nur bei ID 5 ein..
__________________
|
|
22.09.2019 21:23 |
![Beiträge von Hangasilly suchen Beiträge von Hangasilly suchen](images/search.gif)
|
|
|