Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wyciąganie bliźniaczych rekordów przy użyciu jednej wartości ID
Forum PHP.pl > Forum > Bazy danych > MySQL
Tomplus
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;
alegorn
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
Tomplus
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.
toaspzoo
SELECT IN
Tomplus
ż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.
alegorn
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.
Tomplus
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
YaQzi
  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
Tomplus
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
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.