php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-07-2011, 20:32
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard Einfache Freage zu mehreren AND kombinationen

Hallo,

ich habe folgenden sql code

PHP-Code:
SELECT FROM tabelle WHERE id AND (name != "foo" AND nummer != 10001
ich möchte alle zeilen ausgeben die dem entsprchen, aber die klammern von "name != "foo" AND nummer != 10001" werden irgendwie ignoriert so das es nicht als kombination angesehen wird..

meite tabelle:

id ........ name .......... nummer
1...........foo...............10001
1...........boo...............10001
1...........boo...............10002

aus der tabelle würdern dann theoretisch nur die letzten zwei einträge ausgegeben.

irgendwie erscheint mir mein code schon richtig, aber funz iwie nicht und ich hab grad kp was ich daran anders machen soll...

Danke schonmal!

Geändert von BananaJo (08-07-2011 um 21:10 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 08-07-2011, 21:16
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Du verwendest IDs mehrmals???????

Oder ist das nur eine Fantasietabelle, die nichts mit dem tatsächlichen Problem zu tun hat?

Zeig einen Datenbankdump, bei dem sich dieses Problem nachstellen lässt.
Mit Zitat antworten
  #3 (permalink)  
Alt 08-07-2011, 21:22
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

die tabelle ist nur ein beispiel.. ich habe da eine spalte mit ids aus einer anderen tabelle die auch mehrmals vorkommen.

ist denn meine herangehenweise so richtig oder hab ich da schon nen denkfehler drinne den ich absolut nicht sehe... ??
Mit Zitat antworten
  #4 (permalink)  
Alt 08-07-2011, 21:25
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Die Klammer kannst du dir komplett sparen, X AND ( Y AND Z ) das selbe wie X AND Y AND Z ist. Genauso wie 1 + (2 + 3) das selbe wie 1 + 2 + 3 ist.

Ansich seh ich bei der Abfrage keinen Fehler. Deshalb vermute ich den Fehler in den Daten, also zeig bitte einen (kleinen) Datenbankdump, bei dem sich dieser Fehler reproduzieren lässt.
Mit Zitat antworten
  #5 (permalink)  
Alt 08-07-2011, 21:40
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

Also die klammern sollen die beiden AND's zusammenfassen.
Oder funktioniert soetwas nur mit subselsects? ... in der mathematik macht man das doch auch so...

abfrage
PHP-Code:
SELECT FROM watch WHERE chip_id 2204 AND (who != 'foo' AND who_website_id != 10001

tablelle
PHP-Code:

CREATE TABLE 
`watch` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
whovarchar(3NOT NULL,
  `
who_website_idint(11NOT NULL,
  `
chip_idint(11NOT NULL,
  `
newcommentsint(11NOT NULL DEFAULT '0',
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1434 ;

--
-- 
Daten für Tabelle `ads_watch`
--

INSERT INTO `watch` (`id`, `who`, `who_website_id`, `chip_id`, `newcomments`) VALUES
(1429'foo'1000122040),
(
1430'boo'1036122040),
(
1431'boo'1000222040);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */
nach meiner logik müsste jetzt alles ausgegeben werden auser die Zeile mit der ID 1429

Geändert von BananaJo (08-07-2011 um 21:42 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 08-07-2011, 21:55
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von BananaJo Beitrag anzeigen
Also die klammern sollen die beiden AND's zusammenfassen.
Oder funktioniert soetwas nur mit subselsects? ... in der mathematik macht man das doch auch so...
Wie bereits gesagt sind sie in dem Fall überflüssig. Und auch in der Mathematik sind in einem Beispiel wie 1 + (2 + 3) die Klammern überflüssig.

Zitat:
Zitat von BananaJo Beitrag anzeigen
abfrage
PHP-Code:
SELECT FROM watch WHERE chip_id 2204 AND (who != 'foo' AND who_website_id != 10001

tablelle
PHP-Code:

CREATE TABLE 
`watch` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
whovarchar(3NOT NULL,
  `
who_website_idint(11NOT NULL,
  `
chip_idint(11NOT NULL,
  `
newcommentsint(11NOT NULL DEFAULT '0',
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1434 ;

--
-- 
Daten für Tabelle `ads_watch`
--

INSERT INTO `watch` (`id`, `who`, `who_website_id`, `chip_id`, `newcomments`) VALUES
(1429'foo'1000122040),
(
1430'boo'1036122040),
(
1431'boo'1000222040);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */
nach meiner logik müsste jetzt alles ausgegeben werden auser die Zeile mit der ID 1429
Wird es auch:
Code:
mysql> SELECT * FROM watch WHERE chip_id = 2204 AND (who != 'foo' AND who_website_id != 10001);
+------+-----+----------------+---------+-------------+
| id   | who | who_website_id | chip_id | newcomments |
+------+-----+----------------+---------+-------------+
| 1430 | boo |          10361 |    2204 |           0 |
| 1431 | boo |          10002 |    2204 |           0 |
+------+-----+----------------+---------+-------------+
2 rows in set (0.00 sec)
Mit Zitat antworten
  #7 (permalink)  
Alt 08-07-2011, 22:29
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

ach.. ich hab dir ein falsches beispiel gemacht..

wenn aber überall "foo" steht hast du das gleiche problem wie ich habe

PHP-Code:
INSERT INTO `watch` (`id`, `who`, `who_website_id`, `chip_id`, `newcomments`) VALUES 
(1429'foo'1000122040), 
(
1430'foo'1036122040), 
(
1431'foo'1000222040); 
jetzt gehts nicht mehr.. und nichts wird ausgegeben wegen != "foo" ..
Mit Zitat antworten
  #8 (permalink)  
Alt 08-07-2011, 22:47
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von BananaJo Beitrag anzeigen
jetzt gehts nicht mehr.. und nichts wird ausgegeben wegen != "foo" ..
Du hast als eine Teilbedingung, die erfüllt sein muss (da sie mit den anderen per AND verknüpft ist) angegeben, dass du nur Datensätze haben willst, bei denen who != 'foo' ist.
Das ist bei keinem der drei Beispieldatensätze der Fall - also gibt's logischerweise auch keinen von denen im Ergebnis.

Zitat:
ist denn meine herangehenweise so richtig
Nein, nur zu schreiben, „funzt nich wie ich will“ ist selbstverständlich nie richtig

Stattdessen solltest du erst mal verbal beschreiben, was du eigentlich erreichen willst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #9 (permalink)  
Alt 08-07-2011, 22:52
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

ja deswegen waren die klammern ja da..

es sollen nur die datensätze ausgegeben werden die die chip_id = 2204 haben und bei denen (achtung) who UND who_website_id (beide werte zusammen betrachten!!!) nicht foo und 10001 ist

somit ist der erste datensatz aus der suche raus...

wenn bei den anderen foo's eine andere who_website_id ist als 10001, dann ist es ok und der datensatz soll ausgegeben werden.
Mit Zitat antworten
  #10 (permalink)  
Alt 08-07-2011, 22:57
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von BananaJo Beitrag anzeigen
es sollen nur die datensätze ausgegeben werden die die chip_id = 2204 haben und bei denen (achtung) who UND who_website_id (beide werte zusammen betrachten!!!) nicht foo und 10001 ist
Das erreichst du aber nicht mit Klammern alleine.

Du willst wohl eher: WHERE chip_id = 2204 AND NOT ( who = 'foo' AND who_website_id = 10001 )

Geändert von h3ll (08-07-2011 um 23:01 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 08-07-2011, 23:02
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von BananaJo Beitrag anzeigen
ja deswegen waren die klammern ja da..
Sind aber unsinnig an der Stelle:
Zitat:
Zitat von h3ll Beitrag anzeigen
Die Klammer kannst du dir komplett sparen, X AND ( Y AND Z ) das selbe wie X AND Y AND Z ist. Genauso wie 1 + (2 + 3) das selbe wie 1 + 2 + 3 ist.
Zitat:
es sollen nur die datensätze ausgegeben werden die die chip_id = 2204 haben und bei denen (achtung) who UND who_website_id (beide werte zusammen betrachten!!!) nicht foo und 10001 ist
Also willst du die Bedingung who='foo' AND who_website_id=10001 als ganzes nehmen und negieren.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #12 (permalink)  
Alt 08-07-2011, 23:37
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

Danke!!! das mit "AND NOT" funktioniert genau so wie ich das haben wollte!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Selet Abfrage mit mehreren Bedingungen (und / oder Kombinationen) Laire SQL / Datenbanken 2 16-08-2008 19:09
alle kombinationen 3 aus 7 sanktusm PHP Developer Forum 4 24-02-2008 13:54
[Programm] Kombinationen generieren Benny-one Apps und PHP Script Gesuche 1 17-05-2006 20:03
Kombinationen in Datenbank abbilden Dominic SQL / Datenbanken 4 28-01-2006 00:58
alle möglichen kombinationen ermitteln tune PHP Developer Forum 6 25-03-2004 17:23

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:02 Uhr.