mysql INSERT mit IF Bedingung ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
art
bedingung
befehl
code
eins
eintrag
eintragen
einzel
ergebnis
http
kaufhaus
liefern
machen
reihe
spalten
tabelle
url
verwenden
-
Hallo
ich habe eine tabelle mit url, titel, bechreibung, etc
User sollen neue Links vorschlagen können
wie prüfe ich am besten, ob neue URL (und/oder neuer Titel) bereits in der Tabelle ist
um keine doppelten Einträge zu bekommen ?
gibt es sowas wie eine IF Bedingung für INSERT Befehl
... nur eintragen wenn url nicht in Tabelle und wenn titel nicht in Tabelle
geht das auch direkt im INSERT Befehl ?
INSERT INTO tab_name (feldname1, feldname2, feldname3) VALUES (wert1, wert2, wert3) IF ( ... nur wenn feldname1 noch nirgends den Wert wert1 hat ) AND IF ( ... nur wenn feldname2 noch nirgends den Wert wert2 hat )
... aber wie ? ... geht das überhaupt, quasi innerhalb INSERT ne Abfrage ob schon vorhanden ?
wenn ja, bitte ein Beispiel, Danke !
oder muss ich vor dem INSERT eine Abfrage machen ?
SELECT url, titel FROM ... WHERE (url = '$neu_url' OR titel = '$neu_titel')
und dann mit ...
if (mysql_num_rows($query) > 0) { /* schon vorhanden */ } else { /* .... ok ... INSERT ...*/ }
also vor dem INSERT prüfen ???
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ja, du hast recht.
$abfrage = mysql_query("SELECT spalte FROM tabelle WHRER link = '$link_vom_user'"); $reihen = mysql_num_rows($abfrage); if($reihen == 0){ mysql_query("INSERT -----"); }else{ echo "Bereits dabei, der Link."; }
Zählt die Reihen vom angegebenen Query.mysql_num_rows
Und du hast ja ich nehme jetzt mal an die Variable$_POST['link'] = $link_vom_user;
Und du wählst alles von der tabelle aus, welches den Link vom User beinhaltet, und die If-Abfrage frägt halt wenn die Anzahl 0 ist, dann einfügen, wenn nicht(dann ist ja bereits ein Eintrag vorhanden), dann soll er sagen "Bereits dabei, der Link.".
Beitrag zuletzt geändert: 29.10.2011 17:04:56 von geilerheiler -
ok, also muss ich doch die Abfrage vorher machen
und ist das richtig, für ... url ODER titel ist vorhanden
WHERE (url = '$neu_url' OR titel = '$neu_titel')
oder muss ich da zwei Abfragen machen, je eine für url und eine für titel ?
-
Kommt drauf an, vielleicht macht einer, ich weiß ja nicht was dein Script macht, aber
titel = Online-Kaufhaus link = http://ebay.de
und der andere macht es sotitel = Online-Kaufhaus link = http://amazon.de
Das sind ja zwei verschiedene Links.
Ansonsten machste einfach so:
"SELECT url,titel FROM tabelle WHERE url = '$url_user' AND titel = '$titel_user'"
oder eben einfach nur so:
"SELECT url FROM tabelle WHERE url = '$url_user'"
-
Geht auch ohne zwei Abfragen und ist in einer Abfrage sogar performanter in den meisten Fällen.
http://sql.1keydata.com/de/sql-unterabfrage.php
Mit Unterabfragen und der WHERE Klausel geht das recht einfach. Es gibt auch andere wege, aber das ist die leichteste. ;)
Edit:
Achso. Eine DBS interne Lösung wäre einen Primärschlüssel aus den beiden Werten bestehend zu definieren. Wenn ein gleiches Paar nocheinmal eingetragenw erden solls treikt dann das DBS und lehnt den Eintrag ab.
Edit2: Gut. Dann ignoriert das und macht es so... Selber schuld. :3
Beitrag zuletzt geändert: 30.10.2011 1:23:09 von adrians -
geilerheiler schrieb:
Kommt drauf an, vielleicht macht einer, ich weiß ja nicht was dein Script macht, abertitel = Online-Kaufhaus link = http://ebay.de
und der andere macht es sotitel = Online-Kaufhaus link = http://amazon.de
Das sind ja zwei verschiedene Links.
ja, aber ich will die Titel für Rewrite zu einer Einzel-Seite je Eintrag verwenden
da kann ich keine zwei gleichen Titel gebrauchen, oder ich muss bei mehrfachen noch ne Art Zähler bauen
geilerheiler schrieb:
Ansonsten machste einfach so:
"SELECT url,titel FROM tabelle WHERE url = '$url_user' AND titel = '$titel_user'"
naja, dann ist aber die Bedingung AND so, dass nur bei titel UND url schon da
es soll aber auch dann wenn nur eins von beiden schon da ist ein Ergebnis liefern
also doch eher OR ...
oder ichmach die Spalten mit UNIQUE Index und dann INSERT mit IGNORE ...
macht das vielleicht mehr Sinn ?
Beitrag zuletzt geändert: 29.10.2011 19:16:22 von anlagegeld -
anlagegeld schrieb:
geilerheiler schrieb:
Kommt drauf an, vielleicht macht einer, ich weiß ja nicht was dein Script macht, abertitel = Online-Kaufhaus link = http://ebay.de
und der andere macht es sotitel = Online-Kaufhaus link = http://amazon.de
Das sind ja zwei verschiedene Links.
ja, aber ich will die Titel für Rewrite zu einer Einzel-Seite je Eintrag verwenden
da kann ich keine zwei gleichen Titel gebrauchen, oder ich muss bei mehrfachen noch ne Art Zähler bauen
geilerheiler schrieb:
Ansonsten machste einfach so:
"SELECT url,titel FROM tabelle WHERE url = '$url_user' AND titel = '$titel_user'"
naja, dann ist aber die Bedingung AND so, dass nur bei titel UND url schon da
es soll aber auch dann wenn nur eins von beiden schon da ist ein Ergebnis liefern
also doch eher OR ...
oder ichmach die Spalten mit UNIQUE Index und dann INSERT mit IGNORE ...
macht das vielleicht mehr Sinn ?
Wenn es schon nicht eintragen soll, wenn schon eins von beiden doppelt ist, dann natürlich OR.
Normal sollte dein Problem dann gelöst sein, wenn du das mit "OR" machst, und die Abfrage von oben nimmst.
Beitrag zuletzt geändert: 29.10.2011 19:41:49 von geilerheiler -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage