• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

WHERE = konwersja longtext do INT

Object Storage Arubacloud
+2 głosów
175 wizyt
pytanie zadane 9 kwietnia 2015 w SQL, bazy danych przez hypothermi Obywatel (1,170 p.)
SELECT p.ID, p.post_title as `name`,
 pm.meta_value as 'sex', 
 pma.meta_value as 'age',
 pmb.meta_value as 'growth',
 pmc.meta_value as 'weight',
 pmd.meta_value as 'lang'

FROM  edw_posts p 
INNER JOIN edw_postmeta AS pm ON pm.post_id = p.ID
INNER JOIN edw_postmeta AS pma ON pma.post_id = p.ID
INNER JOIN edw_postmeta AS pmb ON pmb.post_id = p.ID
INNER JOIN edw_postmeta AS pmc ON pmc.post_id = p.ID
INNER JOIN edw_postmeta AS pmd ON pmd.post_id = p.ID

WHERE
 pm.meta_key = 'actors-sex' AND
pma.meta_key = 'actors-age' AND
pmb.meta_key = 'actors-growth' AND
pmc.meta_key = 'actors-weight' AND
pmd.meta_key = 'actors-language'

AND CAST(pmb.meta_value AS SIGNED) < 180

AND p.post_type = 'actors' AND 
p.post_status = 'publish'

LIMIT 20

 

 

Hej,

mam problem przy pobieraniu pewnych danych z bazy. Dane będące w mojej stronie jako wzrost czy waga osoby są zapisane jako logntext. Ale muszę też porównować te dane czy np. wzrost nie jest większy niż 190cm. I dla danych typu longtext nie działają operatory: <, >, <=, >=. Chciałbym skonwertować w zapytaniu przy WHERE pobierane dane na INTa i później porównać do wskazanej wartości. Powyżej zamieszczam kod SQLa a w linii 22 dzieje się włąśnie to przyrównywanie (to co jest obecnie tam, nie działa).

 

PS: Wiem, że ogólnie zapytanie jest do bani bo jest wiele razy łączona ta sama tabela, ale nie potrafię zrobić tego optymalniej.

 

 

Aaa i drugie pytanie. Czy może widzi ktoś z was tutaj błąd, bo wyniki z bazy pokazują X razy ten sam wynik w sensie tą samą osobę powieloną właśnie X (np. 20) razy.

3 odpowiedzi

0 głosów
odpowiedź 9 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Co oznacza te "p" w linijce 8?
komentarz 9 kwietnia 2015 przez hypothermi Obywatel (1,170 p.)
Skrót do tabeli "edw_posts".
komentarz 9 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Kurcze. Postaram się Ci pomóc, ale to jest "mroczne" zapytanie. : D
komentarz 9 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Stary... Powiem Ci tak. Całe pytanie napisz od nowa. I poprawnie. Aliasów używaj po From nie w select. Zrób ten kod czytelniejszy bo człowiek chce pomóc no ale nie idzie. Jakbym miał Twoją bazę danych przed oczyma to bym zrobił to rach ciach, ale tak...
komentarz 9 kwietnia 2015 przez hypothermi Obywatel (1,170 p.)
Kurde ciężko właśnie to zaaobrazować.

Tutaj mam optymalniejsze zapytanie:

https://forum.pasja-informatyki.pl/4355/mysql-inner-join-usuniecie-elementu-przy-niespelnieniu-warunku-dolaczonej-tabelii

 

Tylko za to inny problem sie tam pojawia. :/
0 głosów
odpowiedź 9 kwietnia 2015 przez jeremus Maniak (59,720 p.)
-- może sprobuj czegos takiego ( odpowiednik funkcjii iif ) - if albo case, nie wiem która działa w mysqlu ,a żeby kilka wierszy pokazac w jednym to grupujemy , w zalezności od wartości parametru funkcję max, lub sum

tylko raz tabela występuje, nie trzeba inner join

cos takiego :

select id,max(post_title),max(if(meta_key='actors-sex',meta_value,'')) as sex, .... tak samo dla pozostałych atrybutów

from edw_posts

where

 CAST(pmb.meta_value AS integer) < 180

AND p.post_type = 'actors' AND

 p.post_status = 'publish'

group by id

----------------------

w foxpro jest iif

inne sql-e mają cos takiego :

max(case when meta_key='actors-sex' then meta_value else '' end)
0 głosów
odpowiedź 13 kwietnia 2015 przez jeremus Maniak (59,720 p.)
-- w wolnej chwili stworzyłem w mysql dwie tabele , wprowadziłem troche danych i poniższe zapytanie działa prawidłowo, nie powiela i zwraca poprawne wyniki, nie ma tez żadnej konwersji longtext

SELECT id,nazwa,a.post_value as wiek,b.post_value as sex,c.post_value as wzrost,d.post_value as waga,
e.post_value as jezyki
from edw_posts p,edw_postmeta a,edw_postmeta b,edw_postmeta c,edw_postmeta d,edw_postmeta e
where
p.id=a.post_id and p.id=b.post_id and p.id=c.post_id and p.id=d.post_id and p.id=e.post_id
and a.post_key='actors-age'
and b.post_key='actors-sex'
and c.post_key='actors-growth'
and d.post_key='actors-weight'
and e.post_key='actors-language'
and c.post_value<180

 

Podobne pytania

0 głosów
3 odpowiedzi 130 wizyt
0 głosów
2 odpowiedzi 616 wizyt
pytanie zadane 7 marca 2019 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 1 października 2018 w SQL, bazy danych przez 1001 Początkujący (260 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...