Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zmniejszenie wynikow do jednej kolumny
Forum PHP.pl > Forum > Bazy danych > MySQL
voytass
wynik zapytania wyglada tak:

Cytat
aid      bid
19  1
29  1
2  1
1  11
1  22
1  23


czy mozliwe jest uzytkanie (po zapytaniu sql) jednej kolumny tylko z tymi wartosciami > 1, czyli:

Cytat
abid
19 
29 

11
22
23
dr_bonzo
  1. SELECT aid
  2. FROM tabela zamiast
  3. SELECT *
  4. FROM tabela
Vertical
Jeżeli Twoja tabela wygląda tak, jak przedstawiłeś, da się to zrobić w ten sposób:
  1. SELECT (aid * bid) AS abid
  2. FROM tabela;

Ten sposób nie będzie jednak działać jeżeli będziesz miał w tym samym wierszu dwie wartości różne niż 1
dr_bonzo
Lol ale jestem slepy, myslalem ze chodzi o wybor tylko jednej kolumny.

@Vertical: sprytny sposob, ale niestety moze (jak napisales) nie zawsze dzialac, konieczny jest specyficzny uklad danych w bazie

Nie wiem czy da sie to w SQLu zrobic ale zawze mozesz polaczyc wyniki w php:
  1. SELECT aid
  2. FROM tabela WHERE aid > 1

  1. SELECT bid
  2. FROM tabela WHERE bid > 1


a potem array_merge()
popbart
Bardzo proste jeżeli masz mysql'a 4.1.x smile.gif
  1. SELECT *
  2. FROM ((SELECT aid AS pole
  3. FROM tabela) UNION ALL
  4. (SELECT bid AS pole
  5. FROM tabela)) AS temp
  6. WHERE temp.pole>1

Pzdr.
voytass
no to chyba pozostane przy swoich dwoch zapytaniach (tak samo jak pomys dr_bonzo):
- niestety nie zawsze sa jedynki
- baza mysql < 4
dzieki za pomysly, mi juz 'czacha dymi' smile.gif ide na papierosa.
SongoQ
Mozesz enentualnie jesli tam wystepuje null zamieniac na 1.
voytass
Cytat(SongoQ @ 2005-06-26 16:19:24)
Mozesz enentualnie jesli tam wystepuje null zamieniac na 1.

NULL w ogole nie wystepuje.
wystepuja 1,2,3 itd. bo to jest id uzytkownika
FiDO
  1. SELECT GREATEST(aid, bid)
  2. FROM tabela WHERE aid > 1 OR bid > 1
popbart
@Fido czy jesteś pewien że to zastąpi UNION ?
FiDO
A czy gdzies cos takiego sugerowalem? smile.gif (choc w tym przypadku wyniki powinny byc chyba takie same)
W kazdym razie powinno to byc rozwiazaniem dla tego problemu. Wyciagamy wszystkie wiersze, ktore maja jedna z wartosci >1 i wybieramy ta wieksza.. wydaje mi sie, ze to autor chcial osiagnac.
popbart
A mi się wydawało że chodzi o jedną kolumnę ze wszystkimi wartościami z kolumn aid i bid większych od 1 .
FiDO
No to juz by autor musial stwierdzic.. wtedy w kazdym razie juz union bylby konieczny, ale wydaje mi sie ze moznaby to zrobic prosciej:
  1. SELECT aid pole
  2. FROM tabela WHERE aid > 1
  3. UNION
  4. SELECT bid pole
  5. FROM tabela WHERE bid > 1
voytass
wyniki z ta jedynka, nieszczesliwie wam zasugerowaly ze mozna byc tylko > 1 ale niestety nie jest tak

mozebyc tak:
Cytat
aid      bid
19      1
29      1
2        1
1        11
1        22
1        23


ale i tak:
Cytat
aid      bid
19      125
29      125
2        125
125        11
125        22
125        23


moze byc roznie bo jak pisalem powyzsze wyniki dotycza id-kow userow

dodam, ze te powyzsze sa wynikiem zapytania i mozliwe ze to zapytanie trzeba przebudowac by dawalo wynik w jednej klumnie

--------------------
tabela wyglada tak (przykladowo)
Cytat
aid      bid
19      7
29      7
2        7
7        11
7        22
7        23


i caly ten watek tyczy sie tego by wybrac z tabeli te nr idkow, ktore przypadaja dla 7

czyli chcialbym otrzymac (za jednym zapytaniem)

Cytat
ids
19
29
2
11
22
23
brachu
gdybys mial MySQL-a 4.x to moglbys skorzystac z:
  1. SELECT aid
  2. FROM tabela WHERE bid=1
  3. UNION
  4. SELECT bid
  5. FROM tabela WHERE aid=1

no ale ze masz MySQL-a<4 to raczej musisz zrobic to na dwoch zapytaniach sadsmiley02.gif
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-2025 Invision Power Services, Inc.