nur einen wert abfragen
jenslm
- php
nehmen wir mal an ich hab folgende datensaetze:
id=1
sonstwas=051
id=2
sonstwas=051, 052
id=3
sonstwas=053
wenn ich eine abfrage ala [...]WHERE sonstwas = 051[...]
tätige wird nur der erste angezeigt.
wie kann ich realisieren dass die ersten beiden angezeigt werden nicht aber der dritte?
lg, jens
wenn ich eine abfrage ala [...]WHERE sonstwas = 051[...]
tätige wird nur der erste angezeigt.
wie kann ich realisieren dass die ersten beiden angezeigt werden nicht aber der dritte?lg, jens
Was für ein Datentyp ist sonsteas denn?
Wenn es ein VARCHAR also String ist, dann kannst du mit LIKE was machen.
Also WHERE sonstwas LIKE '%051%' ...
Klaus
Hello,
wenn ich eine abfrage ala [...]WHERE sonstwas = 051[...]
tätige wird nur der erste angezeigt.
wie kann ich realisieren dass die ersten beiden angezeigt werden nicht aber der dritte?lg, jens
Was für ein Datentyp ist sonsteas denn?
Wenn es ein VARCHAR also String ist, dann kannst du mit LIKE was machen.
Also WHERE sonstwas LIKE '%051%' ...
Das LIKE ist hier nicht exakt, denn die 051 würden ja uch in 130581 vorkommen, was hier aber nicht gewünscht ist.
Es käme ggf. auch die Funktion find_in_set() in Frage:
http://dev.mysql.com/doc/refman/5.1/de/string-functions.html
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
also ich beshcrieb dsas jetztmal genauer:
id=1
text=hallo
wo=1
id=2
text=tschuess
wo=1, 2
id=3
text=ciao
wo=2
wie mach ich eine abfrage bei der datensatz 1 und 2 bzw. bei der 2 und 3 angezeigt werden nicht aber der jeweils uebrige? es geht naemlich darum dass die texte auf mehreren seiten angezeigt werden sollen.
und das mit SET oder ENUM geht auch nicht, weil dann muesste ich die erlaubten Werte ja alle vorher eingeben...was irgendwie keinen sinn macht!
lg, jens
Hoi!
Okay. Bisher galt hier fuer mich: 'Im Zweifel fuer den Angeklagten' und ich bin mal wohlwollend davon ausgegangen, dass du nicht 2 Werte in einem Feld speicherst, auch wenn es so ausgesehen hat.
Die Antwort ist also: Aendere Deine Datenstruktur. Normalisiere Deine Tabellen.
wie soll ich die normalisieren?
wenn ich mit der spalte "wo" angeben will wo der datensatz angezeigt wird??
da muessen doch dann mehrer werte rein, wenn er auf mehrern seiten angezeigt werden soll?!
lg, jens
Mahlzeit jenslm,
wie soll ich die normalisieren?
wenn ich mit der spalte "wo" angeben will wo der datensatz angezeigt wird??
Die Spalte "wo" sollte es nach einer sinnvollen Normalisierung gar nicht mehr geben.
da muessen doch dann mehrer werte rein, wenn er auf mehrern seiten angezeigt werden soll?!
Nein - eben genau deswegen solltest Du ja Dein komplettes Tabellendesign normalisieren.
MfG,
EKKi
Hello,
wie soll ich die normalisieren?
normalisieren bedeutet hier, aus einer mehrwertigen Spalte eine eigene Tabelle mit einwertigen Spakten zu machen.
aus id: 1 Wo: 1,3,77,23,505
id: 2 Wo: 3,9,27,603,22,666
wird id Wo
1 1
1 3
1 77
1 23
1 505
2 3
2 9
2 27
2 603
2 22
2 666
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
alles kla datenbank ist soweit. und wie mach ich jetzt die abfrage?
erstens:
$sql = "SELECT wo FROM shownin WHERE id = '1'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);
zweitens:
$sql = "SELECT * FROM article WHERE wo = 'werte von oben'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);
wie mach ich das mit werte von oben? mein problem is, dass ich nicht weiß wie ich die ganzen werte von der ersten abfrage in die zweite einbringe?! gibts dafür n spezielles mysql_fetch?
lg, jens
Hi,
erstens:
$sql = "SELECT wo FROM shownin WHERE id = '1'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);zweitens:
$sql = "SELECT * FROM article WHERE wo = 'werte von oben'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);wie mach ich das mit werte von oben?
So, wie mit der 1 in der ersten Abfrage auch - du setzt Werte in einen Textstring ein.
mein problem is, dass ich nicht weiß wie ich die ganzen werte von der ersten abfrage in die zweite einbringe?!
Was meinst du mit „die *ganzen* Werte“?
Es wird, wenn du so wie beschrieben vorgehst, maximal einer sein.
gibts dafür n spezielles mysql_fetch?
Wozu spezieller?
Die mysql_fetch-Funktionen liefern dir den Inhalt eines Datensatzes - du musst ihn jetzt nur noch verarbeiten.
Noch mal: Lerne bitte *Grundlagen*, bevor du hier andauernd eine Frage nach der nächsten zu solchen Trivialitäten abfeuerst.
MfG ChrisB
nein eben nicht du verstehst mich bloss nicht
erstens:
$sql = "SELECT wo FROM shownin WHERE artikelid = '1'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);zweitens:
$sql = "SELECT * FROM article WHERE wo = 'werte von oben'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);wie mach ich das mit werte von oben?
da sind mehrere datensaetze!!! und artikelid ist ungleich primary key!!!
lg, jens
Hi,
nein eben nicht du verstehst mich bloss nicht
Du verstehst ziemlich wenig ...
$sql = "SELECT wo FROM shownin WHERE artikelid = '1'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);
da sind mehrere datensaetze!!!
Na dann sollte doch wohl klar sein, dass das Abholen von nur einem Datensatz nicht ausreichend ist, sondern eine Schleife über alle Datensätze erforderlich ist.
MfG ChrisB
ja und um den datensatz auszugeben benutz man do...while.
aber wie bring ich denn werte in die zweite abfrage ein?
lg
Hallo,
aber wie bring ich denn werte in die zweite abfrage ein?
indem Du nur eine einzige Abfrage stellst :-)
Du bist gerade dabei, Joins in PHP nachzubauen.
Grundlagen zu Joins vermitteln wir Dir sehr gerne. Rouven und ich haben dazu Artikel verfasst:
Einführung in Joins
Fortgeschrittene Jointechniken
Es ist normalerweise überhaupt keine gute Idee, Abfragen in Schleifen abzufeuern.
Freundliche Grüße
Vinzenz
Mahlzeit jenslm,
alles kla datenbank ist soweit.
Wie weit? Wie sieht die jeweiligen Tabellenstruktur jetzt aus?
und wie mach ich jetzt die abfrage?
Sinnvollerweise so, dass die Ergebnismenge das enthält, das Du erwartest und benötigst.
Genauer kann man Dir das nur beantworten, wenn Du die Struktur der beteiligten Tabellen zeigst und vielleicht einige Beispieldatensätze angibst.
MfG,
EKKi
Hallo,
SELECT wo FROM shownin WHERE id = '1';
SELECT * FROM article WHERE wo = 'werte von oben';
kann man zusammenfassen zu:
SELECT
a.*
FROM
article a
INNER JOIN
shownin s
ON
a.wo = s.wo
WHERE
s.id = 1
wie mach ich das mit werte von oben? mein problem is, dass ich nicht weiß wie ich die ganzen werte von der ersten abfrage in die zweite einbringe?!
wie ich sage: nur eine einzige Abfrage vornehmen.
Freundliche Grüße
Vinzenz
tabelle article:
id = primary key
einleitung = einleitung
text = Artikeltext
tabelle shownin:
id = primary key
articleid = article
where = seite auf der der artikel angezeigt werden soll
code:
SELECT a.* FROM article a
a ist die Spalt ist das richtig? also muesst ich jetzt hier eigentlich
SELECT * FROM article
nehmen
SELECT
a.*
FROM
article a
INNER JOIN
shownin s
ON
a.wo = s.wo
WHERE
s.id = 1
was ich am geruest nicht verstehe ist a und s. was soll das sein? eine spalte oder? lg
also ich hab mich nochmal damit beschaeftigt und in soweit gekommen:
tabelle article:
id | article
-------------------
1 | beispieltext
-------------------
2 | infotext
-------------------
tabelle article_whereto:
id | mid | type
-------------------
1 | 1 | test
-------------------
2 | 2 | test
SELECT * FROM article INNER JOIN article_whereto ON article.id = article_whereto.mid WHERE article_whereto.type = 'test'
funktioniert aber nicht was hab ich falsch gemacht?
lg
Mahlzeit jenslm,
SELECT * FROM article INNER JOIN article_whereto ON article.id = article_whereto.mid WHERE article_whereto.type = 'test'
funktioniert aber nicht
"Funktioniert nicht" funktioniert nicht. *Was genau* passiert? Bekommst Du eine Fehlermeldung? Wenn ja: wie lautet sie? Bekommst Du einfach nur keine Daten? *Wie genau* stellst Du diese Abfrage? Per PHP? Per phpMyAdmin? Direkt auf der Datenbank? Liegt der Fehler also vielleicht gar nicht an MySQL, sondern an irgendetwas auf dem Weg dahin?
was hab ich falsch gemacht?
Das kann man Dir sagen, sobald Du grundlegende Informationen zu Deinem Problem lieferst.
MfG,
EKKi
Hallo,
also ich hab mich nochmal damit beschaeftigt und in soweit gekommen:
tabelle article:
id | article
1 | beispieltext
2 | infotext
tabelle article_whereto:
id | mid | type
1 | 1 | test
2 | 2 | test
SELECT * FROM article INNER JOIN article_whereto ON article.id = article_whereto.mid WHERE article_whereto.type = 'test'
funktioniert aber nicht was hab ich falsch gemacht?
das funktioniert ganz hervorragend (soweit man beim Vorhandensein von SELECT * von hervorragend reden kann) und liefert erwartungsgemäß
id | article
----------------
1 | beispieltext
2 | infotext
zurück. Wo ist das Problem?
Gib bitte an,
a) was Du als Ergebnis erwartest
b) was Du als Ergebnis erhältst
Anmerkung: Es ist eine gute Idee, SQL als SQL zu formatieren und nicht als PHP.
a und s waren übrigens Aliasnamen, siehe Handbuch.
Freundliche Grüße
Vinzenz
$sql = "SELECT * FROM menu INNER JOIN menu_whereto ON menu.id = menu_whereto.mid WHERE menu_whereto.type = 'info'";
$result = mysql_query($sql, $database) or die(mysql_error());
$row = mysql_fetch_assoc($result);
do
{
echo $row['article'];
}
while ($row = mysql_fetch_assoc($result));
liefert nichts
sollte liefern:
beispieltext
infotext
tut mir leid funktioniert jetzt
hab wieder schneller gepostet als gedacht
lg, jens
und wieder ein problem
SELECT feld, feld2 FROM article WHERE lang = '$lang' INNER JOIN article_whereto ON article.id = article_whereto.mid WHERE article_whereto.type = 'test'
funktionier nicht!
ich moechte nur die artikel von tabelle:article auswaehlen die bei lang entsprechende die eingestellte sprache haben und dann das alte eben....
wie mus sich das machen?
lg
Hallo,
SELECT feld, feld2 FROM article WHERE lang = '$lang' INNER JOIN article_whereto ON article.id = article_whereto.mid WHERE article_whereto.type = 'test'
> funktionier nicht!
das ist wenig verwunderlich. Die Reihenfolge der Klauseln (Abschnitte) einer SQL-Anweisung ist hübsch fest. Hast Du zwei Bedingungen für die Einschränkung der Ergebnismenge, die durch ein logisches UND verknüpft sind, so musst Du den AND-Operator in der WHERE-Klausel verwenden:
~~~sql
SELECT
feld1,
feld2
FROM
article
INNER JOIN
article_whereto
ON
article.id = article_whereto.mid
WHERE
article_where_to.type = 'test'
AND
lang = <wert>
Freundliche Grüße
Vinzenz
FIND_IN_SET(str,strlist)
==
FIND_IN_SET(info,strlist)
und wie bringe ich die strlist da rein?
lg, jens
Hi,
FIND_IN_SET(str,strlist)
==
FIND_IN_SET(info,strlist)
und wie bringe ich die strlist da rein?
Was ist denn deine strlist?
MfG ChrisB
also die datensatze sollen auf mindestens einer und maximal 3 seiten angezeigt werden. also hat mein feld wo den wert 1 oder 1, 2 oder 1, 2, 3 oder 1, 3 usw.
Hi,
also die datensatze sollen [...]
Das haben wir längst verstanden.
Aber was du an der Beschreibung der Funktion im Manual nicht verstanden hast, das erklärst du uns immer noch nicht.
Gewöhne dir bitte an, auf Rückfragen einzugehen, statt diesen auszuweichen, in dem du einfach bisher schon gesagtes noch mal wiederholst.
MfG ChrisB
sonstwas = varchar
like kommt eig schon fast genau auf das raus was ich suchen nur wie tom erwehnt hat waere das mit 049051 sehr schlecht.
wie verwende ich FIND_IN_SET hab zwar die Anleitung gelsen verstehe aber ehrlich gesagt nicht wie ich das jetzt bei mir einbauen kann?!
lg, jens
Hi,
like kommt eig schon fast genau auf das raus was ich suchen nur wie tom erwehnt hat waere das mit 049051 sehr schlecht.
Das Datendesign ist sehr schlecht.
wie verwende ich FIND_IN_SET hab zwar die Anleitung gelsen verstehe aber ehrlich gesagt nicht wie ich das jetzt bei mir einbauen kann?!
In Handbuch findet sich doch eine Beschreibung, was die Funktion macht, und ein Beispiel.
Womit hast du jetzt noch Probleme?
MfG ChrisB
Hello,
id=2
sonstwas=051, 052
Diese Datenstruktur könnte ggf. normalisiert werden. Ob das für die Praxis günstiger ist, als Deine Variante mit dem Set im String, ist Philosophie. Außerddem könnten die String-Spaltentypen SET oder ENUM hier ggf. noch weiterhelfen, in diesem Spezialfall dann vermutlich SET.
http://dev.mysql.com/doc/refman/5.1/de/string-types.html
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg