Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie danych z dwóch nie zaleznych tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
uczeń php
Mam pytanie czy można wyświetlić dane z dwóch niezależnych tabel w postaci SELECT tabela1.*, tabela2.* FROM tabela1, tabela2;
Crozin
W pewnych przypadkach da się, ale... dlaczego nie wykonasz po prostu dwóch zapytań?
Kildyt
Oczywiście, że się da. Google boli? smile.gif

@Crozin - bo jest łatwiej i szybciej jeżeli operujemy na małych danych.
uczeń php
a czy można zapisać coś takiego ?
SELECT agr_ogloszenia.*, agr_testy.* FROM agr_ogloszenia, agr_testy WHERE agr_ogloszenia.tresc LIKE '%aa%' or agr_testy.tresc LIKE '%aa%'; Dlaczego zamiast jednego razu bo mam tylko taki jeden rekord w tabeli agr_tresc wyświetla mi się aż 9 razy ?
Kildyt
Używaj bbcode.
Nie wiem dlaczego zwraca 9. Nie widzę twojej tabeli. Opisana przez ciebie tabela `agr_tresc` nie występuje w zapytaniu.
Dla ułatwienia dobrze jest oznaczać kolejne tabele literami. Wtedy zapytania są krótsze i bardziej zrozumiałe.
Dobrą praktyką jest oznaczanie tabel i pól apostrofami albo backquotes (`) żeby nie myliły się z poleceniami.
Używanie LIKE nie jest najlepszym pomysłem ze względów optymalizacyjnych. REGEXP jest szybsze.
uczeń php
pomyliłem się chodziło mi o agr_testy
Crozin
Cytat
a czy można zapisać coś takiego ?
A czy mógłbyś spróbować to uruchomić? Nie bój się... jak będzie źle to Ci komputer nie wybuchnie.

Zacznij może od pokazania struktury tabel oraz jakiś przykładowych danych. Przynajmniej będzie wiadomo co chcesz zrobić.
Cytat
Dobrą praktyką jest oznaczanie tabel i pól apostrofami albo backquotes (`) żeby nie myliły się z poleceniami.
Wątek dotyczy MySQL, a w nim zarówno apostrofy jak i cudzysłowie służą do osadzania tekstu. Używanie kopniętych apostrofów jest bardziej złą niż dobrą praktyką - nazwy tabel czy kolumn nie powinny być takie same jak słowa kluczowe (podobnie jak to się ma w niemal wszystkich językach programowania). Ich użycie ma sens wyłącznie w przypadku gdy już się ma zrypaną strukturę bazy danych i trzeba sobie jakoś z tym poradzić.
Cytat
Używanie LIKE nie jest najlepszym pomysłem ze względów optymalizacyjnych. REGEXP jest szybsze.
Szczerze wątpię by użycie wyrażeń regularnych było szybsze niż względnie proste wyszukanie podciągu w ciągu.
uczeń php
To znaczy mam dwie tabele jedną agr_ogloszenia a drugą agr_testy teraz chciałbym za pomocą polecenia SELECT wyświetlić zawartość obu tabel spełniających jeden i ten sam warunek w postaci WHERE tabela1.tresc LIKE '%aaaa%' or agr_testy.tresc LIKE '%aaaa%'; . To znaczy chodzi mi o to sprawdź czy ciąg aaaa występuję w pierwszej tabeli albo drugiej. pytanie dla jednej tabeli było by SELECT * FROM tabela1 WHERE tresc LIKE '%aaaa%' i dla drugiej tabeli też by było SELECT * FROM tabela2 WHERE tresc LIKE '%aaaa%'; Skoro pytania są identyczne jak widać po co się powtarzać ? I teraz te dwa polecenia SELECT chciałbym zapisać za pomocą jednego polecenia SELECT z początku myślałem, że będzie to coś takiego
SELECT agr_ogloszenia.*, agr_testy.* FROM agr_ogloszenia, agr_testy WHERE agr_ogloszenia.tresc LIKE '%aaaa%' or agr_testy.tresc LIKE '%aaaa%'; Sprawdź czy ciąg 'aaaa' występuje w jednej bądź w drugiej tabeli. Jeśli tak to wyświetl ten rekord.
Crozin
Jeżeli obie tabele miałby taki sam schemat (czy bardziej dokładnie: jeżeli zwracane dane miałby ten sam schemat) to mógłbyś użyć UNION (co i tak będzie skutkować wywołaniem dwóch zapytań, ale na poziomie samego silnika) . Tutaj powinieneś po prostu użyć dwóch oddzielnych zapytań i tyle - tak jest MySQL skonstruowany, że takie coś robi się dwoma zapytaniami.
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.