Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] SELECT WHERE id
Forum PHP.pl > Forum > Bazy danych > MySQL
Spirit86
Witam
Chcę zrobić coś takiego:

Pobierz z tabeli
SELECT FROM tabela WHERE id=1 ( OR id = 10 ->jeżeli nie ma rekordów o id=1)

Napisałem:
  1. SELECT
  2. t1.naglowki
  3. FROM
  4. (
  5. SELECT
  6. @rownum := @rownum +1 AS rownum, naglowki
  7. FROM xn_layout WHERE id='1'
  8. ORDER BY id ) t1
  9. WHERE
  10. id =
  11. CASE WHEN t1.rownum=0 THEN
  12. '1'
  13. ELSE
  14. '10'
  15. END

Jednak powyższy kod nie zwraca rekordów. Może da się to zrobić jakoś prościej? (nie chce postów typu: zadaj 2 pytania w php)
pmir13
  1. SELECT * FROM tabela WHERE id=1 OR id=10 ORDER BY id LIMIT 1
Spirit86
to mi pobierze o id 10 lub id 1 czyli załóżmy 2 rekordy, jeżeli oba istnieją... Chcę jeżeli istnieje rekord o id=10 pobrał JEDEN rekord o id=10, jeżeli nie ma takiego niech pobierze ten o id=1
nospor
Przecież masz tam LIMIT 1 - mogłeś sprawdzić to zapytanie w praktyce a nie dyskytować teoretycznie. Z teorią jak widać u Ciebie nie za dobrze (bez urazy) wink.gif
Spirit86
Cytat(nospor @ 26.04.2011, 18:08:02 ) *
Przecież masz tam LIMIT 1 - mogłeś sprawdzić to zapytanie w praktyce a nie dyskytować teoretycznie. Z teorią jak widać u Ciebie nie za dobrze (bez urazy) wink.gif


To jest ułomne zastosowanie i nie uniwersalne. Gdy mam id nie jest unikatowe i mam np 10 rekordów z id=10 i 8 z id=1. Chce pobrac tylko te z id=10
nospor
Cytat
To jest ułomne zastosowanie i nie uniwersalne
Podałęś konkretną sytuację, podano ci najlepsze rozwiązanie dla tej sutyacji. Co w tym ułomnego?

Cytat
Gdy mam id nie jest unikatowe
I teraz dopiero precyzujesz. W świetle nowych faktów podane rozwiązanie faktycznie jest ułomne, Nie można było tak od razu?

W życiu bym nie przypuszczał, że pole o nazwie ID może nie być unikalne... no ale co kraj to obyczaj smile.gif

Tak na szybko:
  1. SET @zm:=10;
  2. SELECT * FROM (
  3. SELECT cc.*,IF(ID=1,@zm:=1,0) FROM TABLE cc WHERE ID = 1 OR ID=10
  4. ) podsel WHERE podsel.ID=@zm
pmir13
  1. SELECT * FROM tabela WHERE id = 10 OR id = 1 AND NOT EXISTS (SELECT id FROM tabela WHERE id=10 )
nospor
@pmir13 masz może jakąś dużą tabelę, gdzie można by czasowo sprawdzić nasz metody? Zastanawiam się nad szybkością obu rozwiązań
Spirit86
@pmir13: to rozwiązanie mi się podoba! smile.gif Proste i skuteczne smile.gif.
@nospor: jak bed mial troche czasu to stworze wieksza baze danych i sprawdze obie metody.

pzdr
pmir13
Na tabeli film_actor i zewnętrznym kluczu film_id z bazy sakila (darmowa testowa baza mysql do ściągniecia) moje zapytanie wykonuje się u mnie na moim domowym gracie w obu przypadkach 0.0008s zwracając po około 10 rekordów ze wszystkich ponad 5tys. Dla porównania zapytanie typu "SELECT 1" wykonuje się 0.0004s, czyli tylko dwa razy szybciej.
To oczywiście nie jest duża baza, ale po explainie i wykorzystaniu kluczy i ilości porównań widać, że niewiele się zmieni gdy liczba dojdzie do kilku milionów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.