PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In welcher Reihe befindet sich Datensatz 24



Floh1111
13.08.2007, 18:35
Hi,

Ich hab mich mal wieder rangesetzt und ein Bischen an einer Mysql-Abfrage rumprobiert, komme aber nicht weiter.

Und zwar hole ich mir aus einer Mysql-Tabelle alle Datensätze die die album_id 30 haben.
Einer der Datensätze hat die picture_id 24.

---------------------------------------
|reihe+++picure_id---album_id|
|--------------------------------------|
|1++++++23+++++++34++++|
|2++++++24+++++++34++++|
|3++++++25+++++++34++++|
---------------------------------------

Wie bekomme ich jetzt raus dass der Datensatz mit der picture_id 24 in Reihe 2 steht?


SELECT picture_id, album_id
FROM bilder
WHERE album_id = 43;

Die Spalte "reihe" dient hier nur zu Veranschaulichung und existiert nicht wirklich!

Wäre toll wenn ihr da Etwas wüsstet..

Bye
Floh1111

blue-dev
13.08.2007, 19:29
Hi,

Ich hab mich mal wieder rangesetzt und ein Bischen an einer Mysql-Abfrage rumprobiert, komme aber nicht weiter.

Und zwar hole ich mir aus einer Mysql-Tabelle alle Datensätze die die album_id 30 haben.
Einer der Datensätze hat die picture_id 24.

---------------------------------------
|reihe+++picure_id---album_id|
|--------------------------------------|
|1++++++23+++++++34++++|
|2++++++24+++++++34++++|
|3++++++25+++++++34++++|
---------------------------------------

Wie bekomme ich jetzt raus dass der Datensatz mit der picture_id 24 in Reihe 2 steht?


SELECT picture_id, album_id
FROM bilder
WHERE album_id = 43;

Die Spalte "reihe" dient hier nur zu Veranschaulichung und existiert nicht wirklich!

Wäre toll wenn ihr da Etwas wüsstet..

Bye
Floh1111

Mit PHP oder wie?

$query = "SELECT * FROM bilder WHERE album_id = 43";
while ($array = mysql_fetch_array($query))
{
echo $array['reihe'];
}

tr0nix
13.08.2007, 19:32
SELECT picture_id, album_id
FROM bilder
WHERE album_id = 43
AND picture_id = 24;

Das meinst du?

Floh1111
13.08.2007, 19:37
@blue-dev:
Ja im Enteffekt wird das ganze in PHP eingebaut.
Wichtig ist aber die SQL-Abfrage.

Der Denkanstoß den du oben gegeben hast wird aber nicht funktionieren da die Spalte "reihe" in der wirklichen Mysql-Tabelle nicht existiert.

Ich hab inzwischen ein bischen selber weiterüberlegt und dachte das das ganze vllt. irgendwie mit COUNT zu bewerkstelligen sein könnte.
Also so etwas wie


COUNT bis zum Datensatz mit der picture_id 24

Dann hätte ich ja die Reihe an der der Datensatz sitzt, nur weiß ich nicht wie ich das jetzt konkret in Code umsetze.

@Tr0nix
Nein das meinte ich nicht.
Ich brauche das für eine Albumnavigation.
Im Enteffekt habe ich eine Tabelle in der Bilderdaten gespeichert sind.
Die Bilder haben eine picture_id und eine album_id album_id und ich möchte wenn ich ein Bild habe mit der picture_id 24 und der album_id 30 mir das nächste Bild mit der album_id 30 ausgeben lassen.
Dabei können zwischen den Bidern aber noch Bilder mit anderen album_id´s sein.

Das ist aber nur das Endergebnis.

//Sry fürs Edit...

Bye
Floh1111

supersucker
13.08.2007, 19:43
Ich hab mich mal wieder rangesetzt und ein Bischen an einer Mysql-Abfrage rumprobiert, komme aber nicht weiter.

Und zwar hole ich mir aus einer Mysql-Tabelle alle Datensätze die die album_id 30 haben.
Einer der Datensätze hat die picture_id 24.

---------------------------------------
|reihe+++picure_id---album_id|
|--------------------------------------|
|1++++++23+++++++34++++|
|2++++++24+++++++34++++|
|3++++++25+++++++34++++|
---------------------------------------

Wie bekomme ich jetzt raus dass der Datensatz mit der picture_id 24 in Reihe 2 steht?

PHP-Code:
SELECT picture_id, album_id
FROM bilder
WHERE album_id = 43;
Die Spalte "reihe" dient hier nur zu Veranschaulichung und existiert nicht wirklich!


Also mir fällt auch nach reichlicher Überlegung nicht __ein__ Grund ein, warum man so etwas machen sollte.


Wo und warum willst du sowas einbauen?

lonestar
13.08.2007, 20:00
Mal so bisserl den Beispielcode aus einem älteren PHP4-Online-Handbuch zur Funktion mysql_fetch_array an dein Problem angepasst sollte es tun:



<?php
mysql_connect ($host, $user, $password);
$result = mysql_db_query ("database","SELECT picture_id, album_id FROM bilder WHERE album_id = 43");
while ($row = mysql_fetch_array ($result)) {
if( $row["picture_id"] == "24") {
// et viola, hier isset, steht in $row!
}
}
mysql_free_result ($result);
?>


Falls du die Nummer des Datensatzes haben willst, musst du noch mitzählen.
Viel Spass noch beim programmieren.

blue-dev
13.08.2007, 20:01
Warum fügst du nicht eine solche Spalte hinzu? Mysql Tabellen sollten immer einen Primärschlüssel haben, das gleiche gilt für fast alle Arten von Tabellen, insbesondere für Access Datenbanken.
Einfach unter Extras "Auto ..." (kp wie das war^^) einschalten und das zählt der die für dich von alleine. Das mit Count funktioniert aber auch, kostet halt nur mehr query oder php Zeit, je nachdem wie du es realisierst.

tr0nix
13.08.2007, 21:04
@Floh: Deine Frage ist wirklich sehr unglücklich formuliert.. meinst du vielleicht LIMIT?

SELECT picture_id, album_id
FROM bilder
WHERE album_id = 43
LIMIT 0,12;
-> Zeigt Datensatz 0 bis 12

...
LIMIT 12,24
-> Zeigt Datensätze 12-24

Floh1111
14.08.2007, 01:07
Ich glaube mit Lonestars Lösung ließe sich was machen.
Das sieht recht interessant aus.
Muss mal sehen wie ich das mit dem "mitzählen" mache...

Ich probier das ganze mal aus wenn es wieder hell ist :D

@tr0nix: Nein....

@blue-dev:
Ja die Tabelle hat auch einen Primärschlüssel - die bekommt bei mir jede Tabelle ;)
Aber ich möchte wissen an welcher Stelle einer Abfrage der Datensatz mit der picture_id 24 auftaucht.

Ich möchte also z.B. aus einer Tabelle mit 1000 Fotos nur die Fotos mit der album_id 34 auslesen.
Das sind dann vielleicht 30 Fotos. Alle andern Haben andere album_id´s.
Bei dieser Abfrage gibt es bspw. ein Foto das die picture_id 24 hat.
Ich möchte nun wissen an welcher stelle der Abfrage das Foto ausgelesen wird.

In dem Raster das ich kurz skiziert hatte steht es bei der Abfrage ja an zweiter Stelle.
Nur wie bekomme ich raus das es an zweiter Stelle steht?

Wie bekomme ich raus an welcher Stelle eine Reihe beim SELECT ausgelesen wird?

Bye
Floh1111

P.S. garnicht so einfach zu erklären...

Cyber
14.08.2007, 10:04
Ohne jetzt großartig code zu posten, würde ich alle Werte erstmal in ein Array lesen, dann im Array das gewünschte Element suchen und dann hast den Key (also die Position aus dem urspr. select).

element
14.08.2007, 10:10
SELECT picture_id, album_id FROM bilder WHERE album_id = 43 AND picture_id <= 24
Ziegt dir alle Datensätze an die die album_id 43 haben und wo die picture_id <= 24 ist

mfg element

Floh1111
14.08.2007, 10:30
SELECT picture_id, album_id FROM bilder WHERE album_id = 43 AND picture_id <= 24

Hey die Idee ist super!
Wie einfach manchmal alles sein kann...
Ich brauch die Datensätze dann nurnoch zählen und hab meinen Wert.

Danke für die Hilfe
Floh1111

element
14.08.2007, 15:05
also wenn du die anzahl der in frage kommenden datensätze haben willst dann nimm doch:

SELECT COUNT(*) FROM bilder WHERE album_id = 43 AND picture_id <= 24

mfg element

saeckereier
15.08.2007, 18:04
Ich hab immer noch keine Antwort auf die Frage gefunden, warum du diese Nummer brauchst. Wie schon einige andere geschrieben haben, macht das eigentlich in keiner denkbaren Kombination Sinn. Es ist sehr wahrscheinlich dass du schon konzeptionell irgendwas falsch machst. Dies insbesondere deshalb weil man bei Datenbanken grundsätzlich nicht von einer definierten Folge der Zeilen aus der Datenbank auszugehen hat. Nichts garantiert dass die immer in derselben Reihenfolge kommen und die Position innerhalb einer Abfrage macht auch eigentliche keinen Sinn, also frage ich auch nochmal wozu?

floyd62
17.08.2007, 14:19
Hi,

habe ja nicht die große Ahnung von MySQL, aber es sollte doch möglich sein, die Oracle-Pseudospalte "ROWNUM" zu emulieren, und dann in einer verschachtelten Abfrage zu nutzen:



set @ROWNUM = 0;
select * from (
select @rownum := @rownum + 1 as "ROWNUM",
picture_id, album_id
from album
where album_id = 34
) as "RESULTS"
where picture_id = 24;


Gruß, Floyd62