Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Wyciąganie bliźniaczych rekordów przy użyciu jednej wartości ID, Nie takie proste jak się wydaje.
Tomplus
post 22.08.2012, 12:05:11
Post #1





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Witam,

Mam tablice o nazwach:
id,nazwa,model,typ,cena

id jest generowany jako ai więc wartość jest zawsze inna, ale chciałbym aby bazując na tej wartości pobrać rekordy które mają taką samą nazwę, model i typ.

ogólnie problem jest prosty w rozwiązaniu, bo nic trudnego jak wykonać jedno zapytanie, a potem drugim zapytaniem wybrać rekordy.

Jednak nie potrafię tego zrobić w MySQL jako jedno zapytanie.

SELECT p.* FROM produkt p WHERE p.id=1234 ORDER BY cena ASC;

Ten post edytował Tomplus 22.08.2012, 18:34:33
Go to the top of the page
+Quote Post
alegorn
post 22.08.2012, 13:34:34
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


musisz zlaczyc tabele z sama soba

cos a'la:

  1. SELECT
  2. b.*
  3. FROM
  4. tabela a
  5. JOIN tabela b USING(nazwa)
  6. WHERE
  7. a.id = 123

j.

edit: korekta

Ten post edytował alegorn 22.08.2012, 13:35:07
Go to the top of the page
+Quote Post
Tomplus
post 22.08.2012, 18:24:58
Post #3





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


tak, tak... też tak myslałem, ale wyświetla nadal jeden rekord czyli ten co ma przypisane ID. Nie potrafię wymyśleć reguły która wybrała tabeli prawej (jeżeli ID przypisujemy do lewej) wszystkich podobnych (z wyjątkiem ID) rekordów.

Nie wiem co się dzieje, ale przy ominięciu zastosowaniu dwóch zapytań strona przestaje działać (przeciąża się serwer)

  1. $ID = 1;
  2. $zap1="SELECT * FROM produkt WHERE id={$ID}";
  3. $zap2="SELECT nazwa,model,typ,cena,kolor FROM produkt WHERE nazwa='{$p1['nazwa']}' AND model='{$p1['model']}' AND typ='{$p1['typ']}'";
  4. while ($p2=mysql_fetch_array(mysql_query($zap2)))
  5. {
  6. echo 'tresc';
  7. }


Trochę nie chce mi się wierzyć że to zapytanie nie działa, ale serio zapytanie p2 musiałem wykomentować aby strona funkcjonowała.

Ten post edytował Tomplus 22.08.2012, 18:30:41
Go to the top of the page
+Quote Post
toaspzoo
post 22.08.2012, 19:05:37
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


SELECT IN


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

LS Easter egg <
Go to the top of the page
+Quote Post
Tomplus
post 22.08.2012, 19:53:50
Post #5





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


że co? SELECT IN? dobra, zastosowałem i wynik jest taki sam jak bez SELECT IN czyli 1 rekord zamiast kilku

  1. SELECT p . *
  2. FROM produkt p
  3. WHERE p.id
  4. IN (
  5. SELECT p2.id
  6. FROM produkt p2
  7. WHERE p2.id =123
  8. )


Może pomógłbyś w zastosowaniu, bo takie rzeczy bez przykładu raczej trudno zrealizować nawet z manualem w ręku.

Ten post edytował Tomplus 22.08.2012, 19:55:01
Go to the top of the page
+Quote Post
alegorn
post 22.08.2012, 20:37:56
Post #6





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


nie ma opcji by nie zadziałał przykład który ci podałem.
pokaż co napisałeś, i jaka masz strukturę tabeli. popraw jeszcze explainem.
najzwyczajniej w świecie - to musi zadziałać.

podzapytania mimo iż prawidłowe - w mysql nie są zalecane. jest to strasznie nieoptymalne.
j.
Go to the top of the page
+Quote Post
Tomplus
post 22.08.2012, 21:08:49
Post #7





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Daje pomógł, bo faktycznie użycie USING wykonało zadanie takie jakie chciałem.

w PHPMyAdmin zapytanie wykonuje się błyskawicznie, ale z kodu PHP mam błąd wewnętrzny serwera czyli za bardzo obciąża się serwer. acz nie wiem dlaczego skoro w bazie istnieje 1000 wyników a funkcja pobiera (wpisując konkretne ID) 5 rekordów.

nie wiem czy to z powodu zapytania czy czegoś innego.

  1. while ($p1=mysql_fetch_array(zapytaj($zap1))) {} \\ nie działa
  2. $p1=mysql_fetch_array(zapytaj($zap1)); \\ działa


Ten post edytował Tomplus 22.08.2012, 21:32:38
Go to the top of the page
+Quote Post
YaQzi
post 22.08.2012, 23:00:52
Post #8





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

Ostrzeżenie: (0%)
-----


  1. SELECT t.*
  2. FROM tabela t
  3. INNER JOIN (SELECT t2.nazwa, t2.model, t2.typ FROM tabela t2 WHERE id = 103) q ON TRUE
  4. WHERE t.nazwa = q.nazwa
  5. AND t.model = q.model
  6. AND t.typ = q.typ


Ten post edytował YaQzi 22.08.2012, 23:01:23


--------------------
 Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń...
Go to the top of the page
+Quote Post
Tomplus
post 23.08.2012, 11:07:48
Post #9





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Korzystałem z podobnego zapytania ale bez ON true, daje pomógł bo zapytanie jest alternatywne do kolegi który pomógł mi przy użyciu USING.

Inne pytanie dot. problemu umieściłem tutaj:
http://forum.php.pl/index.php?showtopic=203985
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:29