Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

Jak sprawdzić, czy większa ilość rekordów w danej kolumnie(kolumna1) tabeli(tabela1) istnieje.

Wiem, jak sprawdzić pojedyńcze rekordy, ale chcę sprawdzić w jednym czasie 500 rekordów. Mogę je wylistować jeden pod drugim.
np.
rekord1
rekord2
rekord3
...

Takie rekordy mógłbym wrzucić np. do pola input w formularzu i chciałbym, aby on wylistował mi te, które nie istnieją. Nie mogę tego nigdzie w sieci znaleźć.
Marcin B.

Marcin B. Webdirector,
Wspólwłasciciel
Contip.net

Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

Arkadiusz Zielazny:
Jak sprawdzić, czy większa ilość rekordów w danej
Jak już to większa liczba :)
Wiem, jak sprawdzić pojedyńcze rekordy, ale chcę sprawdzić w jednym czasie 500 rekordów. Mogę je wylistować jeden pod drugim.
Nie wiem czy do końca dobrze rozumiem, ale możesz do tego użyć operatora IN
http://www.w3schools.com/sql/sql_in.asp

I policzyć sobie rekordy COUNTem. Zliczanie na poziomie PHP chyba nie ma sensu?Marcin B. edytował(a) ten post dnia 07.07.10 o godzinie 11:37
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

group by + having count(*) > X

Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

Świetnie. Własnie o coś takiego mi chodziło. Marcinie bardzo mi pomogłeś z tą funkcją IN.

Mam tylko jeden problem, ponieważ ja listę będę miał w postaci
rekord1
rekord2
rekord3
itd.

Chciałbym wszystkie rekordy sprawdzić na raz, a nie wpisywać je w osobne pola w formularzu. Mogę zapytanie z formularza wysłać poprzez <TEXTAREA name=loginek> i po odczytaniu splitem podzielić na tablicę, ale jak to wstawić w zapytanie mysql, aby pokazało, które loginy nie istnieją.


<?
// parametry serwera
$serwer = "localhost"; // nazwa serwera mysql
$login = "login"; // login do bazy
$haslo = "haslo"; // haslo do bazy
$baza = "baza"; // nazwa bazy
$tabela = "tabela"; // nazwa tabeli

$limit = 500;
$loginek = $_POST['loginek'];
$tablica = split(",", $loginek, $limit);

if($tablica) {

// łączymy się z bazą danych
if (mysql_connect($serwer, $login, $haslo) and mysql_select_db($baza)) {

$wynik = mysql_query("SELECT Count('kolumna1') FROM $tabela Group by 'kolumna1' IN (XXXXX) having count(*)=0")
or die("Błąd w zapytaniu!");

mysql_close();
}
else echo "Nie mogę połączyć się z bazą danych!";

while($row = mysql_fetch_array($wynik)) {
echo "{$row['kolumna1']}\n";
}
} else
{
echo "Brak podzielonej tablicy";
}
?>


Napisałem taki kod i nie wiem, co wstawić zamiast XXXXX, żeby wyświetlić te informacje, których nie znaleziono w tej kolumnie1
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

Arkadiusz Zielazny:
Napisałem taki kod i nie wiem, co wstawić zamiast XXXXX, żeby wyświetlić te informacje, których nie znaleziono w tej kolumnie1

To zapytanie:
SELECT Count('kolumna1') FROM $tabela Group by 'kolumna1' IN (XXXXX) having count(*)=0

zmieniłbym na poniższe, aby było poprawne:
SELECT COUNT('kolumna1') FROM $tabela WHERE kolumna2 IN (XXXXX) GROUP BY 'kolumna1' HAVING COUNT(*) = 0

a może poniższe zapytanie rozwiąże Twój problem?
SELECT COUNT('kolumna1') FROM $tabela WHERE kolumna1 NOT IN (XXXXX)
Krzysztof N. edytował(a) ten post dnia 07.07.10 o godzinie 18:23

konto usunięte

Temat: Jak sprawdzić, czy większa ilość rekordów istnieje w...

Krzysztof N.:
Arkadiusz Zielazny:
Napisałem taki kod i nie wiem, co wstawić zamiast XXXXX, żeby wyświetlić te informacje, których nie znaleziono w tej kolumnie1

To zapytanie:
SELECT Count('kolumna1') FROM $tabela Group by 'kolumna1' IN (XXXXX) having count(*)=0

zmieniłbym na poniższe, aby było poprawne:
SELECT COUNT('kolumna1') FROM $tabela WHERE kolumna2 IN (XXXXX) GROUP BY 'kolumna1' HAVING COUNT(*) = 0

a może poniższe zapytanie rozwiąże Twój problem?
SELECT COUNT('kolumna1') FROM $tabela WHERE kolumna1 NOT IN (XXXXX)
Krzysztof N. edytował(a) ten post dnia 07.07.10 o godzinie 18:23


SELECT [t1].[kolumna] from tabela as t1 left join tabela2 as t2 on t1.kolumna = t2.kolumna
where t2.kolumna is not null


zakładam tu że nie będzie iloczynu kartezjańskiego między tabelami

przy dużej ilości elementów JOIN jest lepszy, co widać w Execution planie



Wyślij zaproszenie do