Problem bei MySQL-Abfrage
am 28.09.2006 11:05:49 von Martin Nadoll
Hallo,
ich frage aus einer MySQL Tabelle mittels PHP Datensätze ab:
$sql = "
SELECT DISTINCT name
FROM myTbl
WHERE name > ''
AND (personenart = 'dlaf' OR personenart LIKE '%dlem%')
AND aktiv = 'j'";
if (!($list = mysql_query($sql, $link))) {
// ERRORMESSAGE
}
$count = mysql_num_rows($list);
Es gibt in der Tabelle (die momentan mit 15 Datensätzen noch sehr
übersichtlich ist) 3 Datensätze, die gefunden werden müssten:
einmal ist personenart 'dlaf' und dieser Datensatz wird gefunden
2 Personen haben die personenart 'dlem' aber diese werden nicht gefunden.
mysql_num_rows ($count) ist 1.
Wenn ich exakt die gleiche Abfrage in phpMyAdmin unter SQL eintrage
(copy-paste), dann werden alle 3 Datensätze gefunden, so wie es sein soll.
Ich habe keine Ahnung warum!
Vielen Dank für jede Hilfe,
Martin Nadoll
Re: Problem bei MySQL-Abfrage
am 28.09.2006 12:16:56 von Ulf Kadner
Martin Nadoll wrote:
> ich frage aus einer MySQL Tabelle mittels PHP Datensätze ab:
Datenbankfragen gehören in die DB-Gruppe!
Ich hab nen FUP dahin (de.comp.lang.php.datenbanken) gesetzt.
> WHERE name > ''
Ich bevorzuge WHERE name <> ''
> AND (personenart = 'dlaf' OR personenart LIKE '%dlem%')
Welchen Grund hat das LIKE hier? Sollte nicht folgendes reichen:
AND (personenart = 'dlaf' OR personenart = 'dlem')
LIKE drückt die Performance
> AND aktiv = 'j'";
> Es gibt in der Tabelle (die momentan mit 15 Datensätzen noch sehr
> übersichtlich ist) 3 Datensätze, die gefunden werden müssten:
> einmal ist personenart 'dlaf' und dieser Datensatz wird gefunden
> 2 Personen haben die personenart 'dlem' aber diese werden nicht gefunden.
> mysql_num_rows ($count) ist 1.
Ich habs mal nachgebaut, da Du dich über den Aufbau Deiner Tabelle
ausschweigst:
CREATE TABLE myTbl (
id INT(7) NOT NULL AUTO_INCREMENT,
name VARCHAR(24) NOT NULL DEFAULT '',
personenart SET('dlaf','dlem','dlim') DEFAULT 'dlaf',
aktiv SET('j','n'),
PRIMARY KEY (id)
);
INSERT INTO myTbl VALUES(null,'Max',DEFAULT,'j');
INSERT INTO myTbl VALUES(null,'Maxi',DEFAULT,'n');
INSERT INTO myTbl VALUES(null,'Fritz','dlem','j');
INSERT INTO myTbl VALUES(null,'Fritzi','dlem','n');
INSERT INTO myTbl VALUES(null,'Anna','dlim','j');
INSERT INTO myTbl VALUES(null,'Anni','dlim','n');
INSERT INTO myTbl VALUES(null,'',DEFAULT,'j');
INSERT INTO myTbl VALUES(null,'',DEFAULT,'n');
SELECT DISTRICT name FROM myTbl
WHERE name <> ''
AND (personenart='dlaf' OR personenart='dlem')
AND aktiv = 'j';
Funktioniert wunderbar. In PHP wie in Mysql direkt.
PHP-Version? MySql-Version? Tabellenaufbau?
MfG, Ulf