Temat: MYSQL problem

Mam zapytanie, które powinno pobrać dane z 2 tabel:

SELECT *
FROM Tabela_A
left JOIN Tabela_B
ON Tabela_A.subscriber = Tabela_B.subscriber WHERE emailaddress='www@www.pl' and field='18' AND data='numer'
UNION ALL
SELECT 'field' AS 'imie', 'data' AS 'imie_ok'
FROM Tabela_A
left JOIN Tabela_B
ON Tabela_A.subscriber = Tabela_B.subscriber WHERE emailaddress='www@www.pl' and field='10'


Mam tutaj błąd.

Są to 2 tabele, których układ jest następujący:

Tabela_A
subscriber|emailaddress|confirmed|secretcode|confirmip |subscribedate
1 |www@http://pl| 1 | 12345 |123.123.1.1|123456789

Tabela_B
subscriber | field | data
1 | 10 | imie
1 | 15 | nazwisko
1 | 18 | numer
1 | 20 | auto

Chcę pobrać dane w jednym zapytaniu, gdzie wyciągnę imię, numer, email, sekretny kod wybranych osób według ich numeru(pole field=18).

Wspólne pole to subscriber.

Proszę o pomoc!

konto usunięte

Temat: MYSQL problem


SELECT
tab1.pole1,
tab1.pole2,
tab2.pole1,
tab2.pole2
FROM
tab1
LEFT JOIN tab2 ON tab1.poleX = tab2.poleY
WHERE
...

Temat: MYSQL problem

Tak, ale mam jedna tabelę pionową, a drugą poziomą i tu mam problem

konto usunięte

Temat: MYSQL problem

I w czym problem?
Toż to relacja 1-do-N

Jeżeli użyjesz napisanego przeze mnie join'a, to część z tab1 będzie się powtarzać dla każdego rekordu odczytywanego z tab2.

Zawsze możesz to rozbić na dwa oddzielne zapytania. Tylko pod żadnym pozorem nie wywołuj zapytań w pętli.

Odczytaj rekordy z tab1, zbierz klucze i dla tychże kluczy odczytaj z tab2.

Ewentualnie możesz zrobić coś takiego, ale to będzie lekką makabrą dla większych porcji danych:

SELECT
tab1.pole1,
tab2.pole2,
(SELECT tab2.pole1 FROM tab2 WHERE tab2.poleN = tab1.poleN) as pole3,
(SELECT tab2.pole2 FROM tab2 WHERE tab2.poleN = tab1.poleN) as pole4,
FROM
tab1
WHERE
...
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

Czesc
W drógiej tabeli znajduja sie ( subscriber , field . data)
Interesuje mnie czy field jest niezalezna warjacja, czy jest to imput box id ?

Temat: MYSQL problem

pole field to jakaś zmienna definiowana przez użytkownika. np. pola 1 to będą marki samochodu, a pola 6 to marki rowerów. Użytkownik sam definiuje co pod danym polem jest. Jedna zmienna jest stała. Pod 18 jest numer użytkownika. Chciałbym mając ten numer wyświetlić mu całą listę danych wraz z danymi z innej tabeli
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

Ponizej znajdziesz dwa scrypty, które utworza Ci 2x "View" w twoje bazie danych.
Jesli nazwy kolumn i tabeli sie zgdzaja.
Odpal scrypt nr1 a potem 2gi.

1. Pierwszy view
Taki powinien byc output SELECT *


Obrazek


2 Drugi view
Taki powinien byc output SELECT *


Obrazek


SCRYPT 1

CREATE VIEW `table2_view` AS
SELECT `table_b`.`subscriber` AS `subscriber`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '15') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `nazwisko`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '20') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `auto`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '18') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `numer`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '10') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `imie`
FROM(`table_a`
LEFT JOIN `table_b`
ON((`table_b`.`subscriber` = `table_a`.`subscriber`)))
GROUP BY `table_b`.`subscriber`;

SCRYPT 2

CREATE VIEW `all_view` AS
SELECT `table_a`.*, `table2_view`.`nazwisko`, `table2_view`.`auto`, `table2_view`.`numer`, `table2_view`.`imie`
FROM table_a, table2_view
WHERE `table2_view`.`subscriber`= `table_a`.`subscriber`;

Daj znac jak Ci poszlo
PozdrawiamGreg Gogol edytował(a) ten post dnia 14.05.12 o godzinie 17:14

konto usunięte

Temat: MYSQL problem

Greg Gogol:
SCRYPT 1

CREATE VIEW `table2_view` AS
SELECT `table_b`.`subscriber` AS `subscriber`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '15') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `nazwisko`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '20') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `auto`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '18') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `numer`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` like '10') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `imie`
FROM(`table_a`
LEFT JOIN `table_b`
ON((`table_b`.`subscriber` = `table_a`.`subscriber`)))
GROUP BY `table_b`.`subscriber`;

SCRYPT 2

CREATE VIEW `all_view` AS
SELECT `table_a`.*, `table2_view`.`nazwisko`, `table2_view`.`auto`, `table2_view`.`numer`, `table2_view`.`imie`
FROM table_a, table2_view
WHERE `table2_view`.`subscriber`= `table_a`.`subscriber`;

Daj znac jak Ci poszlo
Pozdrawiam

a co to za SQl-owe potworki?
te subselecty to już mistrzostwo świata!

sory tan Like to jest dopiero przegięcie +1 do Miszczu SQL-aPrzemysław R. edytował(a) ten post dnia 14.05.12 o godzinie 17:28

konto usunięte

Temat: MYSQL problem

Arkadiusz Zielazny:
Mam zapytanie, które powinno pobrać dane z 2 tabel:

SELECT *
FROM Tabela_A
left JOIN Tabela_B
ON Tabela_A.subscriber = Tabela_B.subscriber WHERE emailaddress='www@www.pl' and field='18' AND data='numer'
UNION ALL
SELECT 'field' AS 'imie', 'data' AS 'imie_ok'
FROM Tabela_A
left JOIN Tabela_B
ON Tabela_A.subscriber = Tabela_B.subscriber WHERE emailaddress='www@www.pl' and field='10'

Tabela_A
subscriber|emailaddress|confirmed|secretcode|confirmip |subscribedate
1 |www@http://pl| 1 | 12345 |123.123.1.1|123456789

weź mi wytłumacz od kiedy union działa na nierównych ilościach kolumn wynikowych?

SELECT * FROM Tabela_A

SELECT 'field' AS 'imie', 'data' AS 'imie_ok' FROM Tabela_A

w momencie gdy masz

subscriber|emailaddress|confirmed|secretcode|confirmip|subscribedate

zastanów się nad tym

konto usunięte

Temat: MYSQL problem

select 
A.*
,GROUP_CONCAT(case when B.field = 10 then B.data else '' end SEPARATOR '' ) as `imie`
,GROUP_CONCAT(case when B.field = 15 then B.data else '' end SEPARATOR '' ) as `nazwisko`
,GROUP_CONCAT(case when B.field = 18 then B.data else '' end SEPARATOR '' ) as `numer`
,GROUP_CONCAT(case when B.field = 20 then B.data else '' end SEPARATOR '' ) as `auto`
from test.Tabela_B as B join Tabela_A as A on B.subscriber = A.subscriber

konto usunięte

Temat: MYSQL problem

przetestuj czy coś zyskujesz czasowo robiąc jedno zapytanie.
bo pewnie łatwiej i szybciej wyjdzie zrobić dwa oddzielne zapytania jeśli twój projekt na to pozwala.

konto usunięte

Temat: MYSQL problem

Arkadiusz Zielazny:
Tabela_A
subscriber|emailaddress|confirmed|secretcode|confirmip |subscribedate
1 |www@http://pl| 1 | 12345 |123.123.1.1|123456789

Tabela_B
subscriber | field | data
1 | 10 | imie
1 | 15 | nazwisko
1 | 18 | numer
1 | 20 | auto

ile danych w tabeli A przypada na jednego subscriber'a ? więcej niż 1 ?
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

Sorry panie Przemysław, ale zrobilem to querry w autobusie gdy jechalem do pracy.
Po drugi nie uwazam sie za mistrza SQL
Po trzecie zrobilem to poniewaz kolego potrzebowal pomocy i wydaje mi sie ze takie kometarze sa nie na miejscu.
Po czwarte, przyznaje equals '=' zamiast 'LIKE' bedzie dawalo taki sam rezultat
czyli:

CREATE VIEW `table2_view23` AS
SELECT `table_b`.`subscriber` AS `subscriber`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '15') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `nazwisko`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '20') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `auto`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '18') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `numer`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '10') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `imie`
FROM(`table_a`
LEFT JOIN `table_b`
ON((`table_b`.`subscriber` = `table_a`.`subscriber`)))
GROUP BY `table_b`.`subscriber`;

konto usunięte

Temat: MYSQL problem

Greg Gogol:
Sorry panie Przemysław, ale zrobilem to querry w autobusie gdy jechalem do pracy.

kiepska wymówka
Po drugi nie uwazam sie za mistrza SQL

to po co dajesz głupie rady?
Po trzecie zrobilem to poniewaz kolego potrzebowal pomocy i wydaje mi sie ze takie kometarze sa nie na miejscu.

może krytyka zmotywuje cie do ćwiczenia SQL-a w domowym zaciszu a nie płodzenia potworków w autobusie

Po czwarte, przyznaje equals '=' zamiast 'LIKE' bedzie dawalo taki sam rezultat

znając życie wszędzie ładujesz Like
czyli:

CREATE VIEW `table2_view23` AS
SELECT `table_b`.`subscriber` AS `subscriber`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '15') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `nazwisko`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '20') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `auto`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '18') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `numer`,
(SELECT DISTINCT `table_b`.`data` from `table_b` where ((`table_b`.`field` = '10') and (`table_b`.`subscriber` = `table_a`.`subscriber`))) AS `imie`
FROM(`table_a`
LEFT JOIN `table_b`
ON((`table_b`.`subscriber` = `table_a`.`subscriber`)))
GROUP BY `table_b`.`subscriber`;

problemem nie jest like tylko 4 subquery na jeden wiersz
przy ilu wierszach taka konstrukcja osiągnie masę krytyczną i eksploduje? jak już musisz koniecznie subquery to zrób to blokowo, na pewno będzie szybciej

np.

select Tabela_A.subscriber, Tabela_A.emailaddress, Tabela_A.confirmed, Tabela_A.secretcode, Tabela_A.confirmip,
Tabela_A.subscribedate
,B1.data as `imie`
,B2.data as `nazwisko`
,B3.data as `numer`
,B4.data as `auto`
FROM Tabela_A
left join (select Tabela_B.subscriber, Tabela_B.data
FROM Tabela_B
where Tabela_B.field = 10) as B1
on B1.subscriber = Tabela_A.subscriber
left join (select Tabela_B.subscriber, Tabela_B.data
FROM Tabela_B
where Tabela_B.field = 15) as B2
on B2.subscriber = Tabela_A.subscriber
left join (select Tabela_B.subscriber, Tabela_B.data
FROM Tabela_B
where Tabela_B.field = 18) as B3
on B3.subscriber = Tabela_A.subscriber
left join (select Tabela_B.subscriber, Tabela_B.data
FROM Tabela_B
where Tabela_B.field = 20) as B4
on B4.subscriber = Tabela_A.subscriber


masz tylko cztery subquery na wszystkie wiersze zamiast czterech na wiersz

Like to tylko wisienka na torciePrzemysław R. edytował(a) ten post dnia 14.05.12 o godzinie 20:16
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

VBA, VB, VBS, ASP - Bardzo dobra
VB.NET, ASP.NET, PHP, (X)HTML, JavaScript - Dobra

Taki z Ciebie gigant, że nawet CSS nie potrafisz pod swoja stronke napisac???

<!--
/*
-----------------------------------------------
Blogger Template Style
Name: Simple
Designer: Josh Peterson
URL: http://noaesthetic.com
----------------------------------------------- */
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

LOL
Przeciez twoja stronka jest zrobiona w http://blogger.com
Wiesz co... Moja babcia potrafilaby zrobic taka sama stronke.
Pozdrawiam
Pseudo Developera

konto usunięte

Temat: MYSQL problem

Greg Gogol:
VBA, VB, VBS, ASP - Bardzo dobra
VB.NET, ASP.NET, PHP, (X)HTML, JavaScript - Dobra

Taki z Ciebie gigant, że nawet CSS nie potrafisz pod swoja stronke napisac???

a po co?
ten blog ma treści merytoryczne a nie bzdetny wygląd

konto usunięte

Temat: MYSQL problem

Greg Gogol:
LOL
Przeciez twoja stronka jest zrobiona w http://blogger.com
Wiesz co... Moja babcia potrafilaby zrobic taka sama stronke.
Pozdrawiam
Pseudo Developera

a potrafiła by napisać zawarte tam materiały?
mylisz narzędzie służące do uzyskania jakiegoś efektu z samym efektem

żenada
Greg Gogol

Greg Gogol Sales / IT, Furness
Trading Ltd

Temat: MYSQL problem

Przemysław R.:
Greg Gogol:
LOL
Przeciez twoja stronka jest zrobiona w http://blogger.com
Wiesz co... Moja babcia potrafilaby zrobic taka sama stronke.
Pozdrawiam
Pseudo Developera

a potrafiła by napisać zawarte tam materiały?
mylisz narzędzie służące do uzyskania jakiegoś efektu z samym efektem

żenada


Wlasnie w tym problem
Strasznie ciezko oglada sie ten flash movie bez full screen modu.
Chyba zapomniales dodac:
allowfullscreen="true"
w:
<embed></embed>

http://vbamania.blogspot.co.uk/2011/02/synchronizacja-...

P.S
Pierwszy raz spotykam developera, który nie komentuje kodu.
To ma byc learning source, czy developer diary?Greg Gogol edytował(a) ten post dnia 14.05.12 o godzinie 21:18

konto usunięte

Temat: MYSQL problem

Greg Gogol:
Przemysław R.:
Greg Gogol:
LOL
Przeciez twoja stronka jest zrobiona w http://blogger.com
Wiesz co... Moja babcia potrafilaby zrobic taka sama stronke.
Pozdrawiam
Pseudo Developera

a potrafiła by napisać zawarte tam materiały?
mylisz narzędzie służące do uzyskania jakiegoś efektu z samym efektem

żenada


Wlasnie w tym problem
Strasznie ciezko oglada sie ten flash movie bez full screen modu.
Chyba zapomniales dodac:
allowfullscreen="true"
w:
<embed></embed>

http://vbamania.blogspot.co.uk/2011/02/synchronizacja-...

dzieki za podpowiedź

P.S
Pierwszy raz spotykam developera, który nie komentuje kodu.
To ma byc learning source, czy developer diary?

poprawka prawie nie komentuje kodu,
widzę kod i wiem co on robi, chyba że nie wiem to wtedy komentuję

Następna dyskusja:

Problem z zapytaniem mysql




Wyślij zaproszenie do