Det bästa sättet att jämföra ett fält från en tabell med olika värden i en annan tabell med PHP och MySQL beror på den specifika jämförelse du behöver utföra. Här är flera scenarier och hur man hanterar dem:
Scenario 1:Kontrollera om ett värde finns i en annan tabell
Låt oss säga att du har två tabeller:"Användare" och "beställningar". Du vill hitta alla användare som har gjort minst en beställning.
* Tabell `Användare`: `user_id`,` namn '
* Tabell `Order`: `Order_id`,` user_id`, `order_date`
PHP -kod:
`` `php
php
$ conn =new mysqli ("your_db_host", "your_db_user", "your_db_password", "your_db_name");
if ($ conn-> connect_error) {
Die ("Anslutning misslyckades:". $ conn-> connect_error);
}
$ sql ="Select U.User_id, U.Name
Från användare u
Där finns (
Välj 1
Från order o
Där o.user_id =u.user_id
) ";
$ resultat =$ conn-> query ($ sql);
if ($ result-> num_rows> 0) {
medan ($ rad =$ result-> fetch_assoc ()) {
Echo "Användar -ID:". $ rad ["user_id"]. " - Namn:". $ rad ["namn"]. "
";
}
} annat {
echo "0 resultat";
}
$ conn-> close ();
?>
`` `
Detta använder en "existerande" underprov, som i allmänhet är det mest effektiva sättet att kontrollera om det finns. Den kontrollerar bara om en matchande "user_id" finns i tabellen "Order", inte hämtar några data från själva tabellen "Order".
Scenario 2:Jämförelse av värden och hitta skillnader
Låt oss säga att du har två tabeller med ett gemensamt fält, och du vill hitta rader där värdena i ett annat fält skiljer sig åt.
* Tabell `Products`: `Product_id`,` pris '
* Tabell `Price_history`: `Product_id`,` pris ', `datum`
Du vill hitta produkter där det nuvarande priset i "Products" skiljer sig från det senaste priset i "Price_history".
PHP -kod:
`` `php
php
$ conn =new mysqli ("your_db_host", "your_db_user", "your_db_password", "your_db_name");
if ($ conn-> connect_error) {
Die ("Anslutning misslyckades:". $ conn-> connect_error);
}
$ sql ="Select p.product_id, p.price as current_price, ph.price som history_price
Från produkter P
Gå med (välj produkt_id, max (datum) som max_date från price_history grupp av produkt_id) som ph_max på p.product_id =ph_max.product_id
Gå med i Price_History Ph på ph_max.product_id =ph.product_id och ph_max.max_date =Ph.Date
Där P.Price! =Ph.Price ";
$ resultat =$ conn-> query ($ sql);
// ... (resten av koden för att behandla resultaten är densamma som scenario 1)
$ conn-> close ();
?>
`` `
Detta använder en underkvis för att hitta det senaste priset från `Price_history` för varje produkt och sedan går med med den med` Products '-tabellen för att jämföra priser.
Scenario 3:Hitta matchningar baserade på flera fält
Om du behöver jämföra baserat på flera fält, justera klausulen "Var" i enlighet därmed:
`` `SQL
Där u.user_id =o.user_id och u.city =o.city
`` `
Viktiga överväganden:
* Felhantering: Koden innehåller grundläggande felhantering för databasanslutningen. Lägg till mer robust felhantering för produktionsmiljöer.
* Förberedda uttalanden: För säkerhet, använd alltid beredda uttalanden för att förhindra SQL -injektionssårbarheter, särskilt om du integrerar användarinmatning i dina frågor.
* databasoptimering: För stora datasätt kan du överväga att lägga till index till de fält du jämför för att förbättra frågeställningen.
* Datatyper: Se till att datatyperna för fälten du jämför är kompatibla.
Kom ihåg att ersätta `" your_db_host "`, `" your_db_user "`, `" your_db_password "` och `" your_db_name "med dina faktiska databasuppgifter. Välj det scenario och kod som bäst passar dina specifika jämförelsebehov. Om du har en mer specifik fråga, ge tabellstrukturerna och den exakta jämförelsen du vill utföra och jag kan ge dig mer skräddarsydd kod.